在 __init__ 类中使用 Argparse

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

Dee*_*ace 5

它极不可能是最好的设计。

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)