如何使用位置和关键字参数进行类初始化

时间:2017-09-22 08:00:11

标签: python python-3.x class arguments

我正在尝试创建一个类,它允许使用参数的默认值或传递给它的值进行初始化。此外,我希望能够将这些参数作为位置或密钥传递。它与keyworded参数一起使用,但是,当我尝试使用任意数量的位置参数创建foo = Foo(3)时,我得到TypeError: __init__() takes 1 positional argument but 2 were given

class Foo:
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        args_list = OrderedDict()
        args_list.update(x=1,
                        y=2,
                        z=3)
        args_list.update(kwargs)

        iter_args_list = enumerate(args_list)
        for positional_arg in args:
            (_, key_value) = next(iter_args_list)
            args_list[key_value] = positional_arg

        for argument_key, argument_value in args_list.items():
          setattr(self, argument_key, argument_value)

1 个答案:

答案 0 :(得分:2)

问题可能是您将argskwargs传递给super()object不喜欢,因为object没有(命名或未命名的参数。所以你应该改写:

class Foo:
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # ...

为:

class Foo:
    def __init__(self, *args, **kwargs):
        super().__init__()
        # ...