繁体   English   中英

*args 和 **kwargs 在 python

[英]*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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM