Spi*_*fyB 3 python arguments class argparse python-3.x
是否可以在类中使用 Argparse,如果可以,您将如何获取解析器的参数?有没有更好的方法来解决这个问题?到目前为止,这是我的代码:
class Game:
def __init__(self):
parser = argparse.ArgumentParser()
parser.add_argument("num_players", help="Number of players", type=int)
...
args = parser.parse_args()
if __name__ == '__main__':
g = Game()
Run Code Online (Sandbox Code Playgroud)
是否有提供可选参数的方法,例如--verbose?
它极不可能是最好的设计。
该Game班可能不应该关心它是如何初始化,它也许应该什么都不知道的命令行参数。您最好在外部解析 CLI 参数,然后将参数传递给Game.__init__或至少传递给专用的Game.from_cli_args类方法。
import argparse
class Game:
def __init__(self, num_players):
print('Game got {} as num_players'.format(num_players))
self.num_players = num_players
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument("num_players", help="Number of players", type=int)
...
args = parser.parse_args()
g = Game(args.num_players)
Run Code Online (Sandbox Code Playgroud)
然后执行:
$ python main.py 2
Game got 2 as num_players
Run Code Online (Sandbox Code Playgroud)
如果您--用作前缀,则需要显式传递参数:
parser.add_argument("--num_players", help="Number of players", type=int)
Run Code Online (Sandbox Code Playgroud)
然后
$ python main.py --num_players 2
Game got 2 as num_players
Run Code Online (Sandbox Code Playgroud)