[英]*args and **kwargs in python
我保证我是 *args 和 **kwargs 的初学者。 我试图制作一些模拟代码来模仿我在这个论坛和 .net 上其他地方看到的东西。 但是,当我尝试做与我所看到的类似的事情时,我收到了意外错误。 这是例子:
class A():
defined = []
def __new__(cls, *args, **kwargs):
new = kwargs['new']
if not new and len(A.defined)>0:
x = A.defined[0]
else:
# x = super().__new__(cls, *args, **kwargs)
# if I use this, it raises error:
# "TypeError: object.__new__() takes exactly one argument (the type to instantiate)"
x = super().__new__(cls)
# this works
return x
def __init__(self, value, *args, **kwargs):
self.value = value
A.defined.append(self)
a = A("a", new = True)
为什么会出现这个错误?
谢谢。
当您使用super().__new__
时,它是object
class 的__new__
方法,它只接受一个参数 ( cls
)。 因为您还向它转发*args, **kwargs
arguments,所以您基本上是将(cls, new=True)
发送到只需要(cls)
的方法
希望这是有道理的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.