python - 在类 __init__ 中使用 Argparse
问题描述
是否可以在类中使用 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()
还有一种方法可以提供可选参数,例如--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)
然后执行:
$ python main.py 2
Game got 2 as num_players
如果您使用--
作为前缀,则需要显式传递参数:
parser.add_argument("--num_players", help="Number of players", type=int)
然后
$ python main.py --num_players 2
Game got 2 as num_players