我正在尝试创建一个类,它允许使用参数的默认值或传递给它的值进行初始化。此外,我希望能够将这些参数作为位置或密钥传递。它与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)
答案 0 :(得分:2)
问题可能是您将args
和kwargs
传递给super()
而object
不喜欢,因为object
没有(命名或未命名的参数。所以你应该改写:
class Foo:
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# ...
为:
class Foo:
def __init__(self, *args, **kwargs):
super().__init__()
# ...