我有一个带有这样的函数的类:

def foo(self):
    do_stuff()


我这样称呼它:

instance.foo()


我得到这个错误:

TypeError: foo() takes exactly 1 argument (0 given)


但这可以正常工作:

instance.foo(instance)


谁能解释为什么会这样?有点怪我

如果您需要更多信息,请随时询问

编辑这里是实际代码的近似值...

def __new__(self):
    blah blah
    MyClass.__init__(self,blah)
    self.foo(self)     #<------------------------error here


我怀疑我误会了__new__的工作原理...我正在阅读

最佳答案

这里的问题是,新函数不接受self作为参数,因为您正在其中创建新对象。实际上,第一个参数是类,通常简称为cls。

Source

更正的样本:

def __new__(cls):
    blah blah
    obj = MyClass.__new__(MyClass)
    obj.foo()
    return obj


这将创建MyClass的实例而不是cls。如果MyClass是cls的子类,则它的init方法也将被自动调用(请参阅链接参考)

关于python - Python有时不将类实例作为第一个参数传递-理解__new__,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14560411/

10-16 03:17