Python 如何使用位置参数和关键字参数初始化类
我试图创建一个类,该类允许使用参数的默认值或传递给它的值进行初始化。此外,我希望能够将这些参数作为位置参数或关键字参数传递。但是,当我尝试用任意数量的位置参数创建它时,如果我得到一个Python 如何使用位置参数和关键字参数初始化类,python,python-3.x,class,arguments,Python,Python 3.x,Class,Arguments,我试图创建一个类,该类允许使用参数的默认值或传递给它的值进行初始化。此外,我希望能够将这些参数作为位置参数或关键字参数传递。但是,当我尝试用任意数量的位置参数创建它时,如果我得到一个TypeError:\uuuu init\uuuu()接受1个位置参数,但给出了2个 class Foo: def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) args_list = Or
TypeError:\uuuu init\uuuu()接受1个位置参数,但给出了2个
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)
问题可能是您将
args
和kwargs
传递给super()
,而object
不喜欢这样,因为object
不接受(命名或未命名)参数。所以你应该重写:
class Foo:
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# ...
Foo类:
定义初始化(self,*args,**kwargs):
super()
#…
致:
Foo类:
定义初始化(self,*args,**kwargs):
super()。\uuuu init\uuuuu()
#…
您会遇到什么类型的错误?请提供完整的回溯。TypeError:\uuuu init\uuuuu()接受1个位置参数,但给出了2个
,编辑了主要帖子以供将来参考:始终包括错误消息(和回溯)。显然有错误(否则你不会问问题),但这有助于显示你的错误。谢谢你的回复,不幸的是,它似乎没有help@Cons:用新错误编辑您的问题,并进行完整的回溯。@缺点:我认为Foo
有一个超类,您不共享。因此,无法调试它,因为您进行了super()。\uuuu init\uuuu
调用,因此我们至少需要该函数的签名。哦,我的错误,它确实起作用了。现在的问题是如何实际分配参数。它无法处理长度超过1个字符的关键字,但我想这是一个单独的问题issue@Cons:你能提供你得到的错误吗?我设法构造了一个Foo(ab=2)
。
class Foo:
def __init__(self, *args, **kwargs):
super().__init__()
# ...