传递给函数并作为字典返回的命令行参数的问题

时间:2015-11-10 19:11:12

标签: python class command-line-arguments keyword-argument

class Cass(object):

    def __init__(self, **args):
        self.top_n = "endpoint1"
        self.time_series = "endpoint2"

    def get_args(**kwargs):
        print kwargs


def main(args):
    cass = Cass()
    cass.get_args()


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument('-r', '--regional', type=bool, default=False)
    parser.add_argument('-tn', '--top_n', type=bool, default=False)
    parser.add_argument('-tt', '--traffic_to', type=str, default=False)
    parser.add_argument('-tf', '--traffic_from', type=str, default=False)
    parser.add_argument('-s', '--start_time', type=int, default=False)
    parser.add_argument('-e', '--end_time', type=int, default=False)

    args = parser.parse_args()

    main(args)

当我运行python cassa_revamp.py -r True -tn False -tt ca -tf ca -s 0 -e 10时,我希望所有参数都打印为字典,因为我使用的是**kwargs。我收到以下错误:

Traceback (most recent call last):
  File "cassa_revamp.py", line 36, in <module>
    main(args)
  File "cassa_revamp.py", line 22, in main
    cassavania.get_args()
TypeError: get_args() takes exactly 0 arguments (1 given)

1 个答案:

答案 0 :(得分:2)

argsNamespace个对象; get_args期望零个或多个关键字参数。您需要使用

致电get_args
cass.get_args(**vars(args))

vars返回其参数属性的字典,**语法将字典作为一系列关键字参数而不是单个dict对象传递。

此外,除了关键字参数之外,还应定义get_argsself作为参数:

def get_args(self, **kwargs):
    print kwargs