我有一个带有这样的函数的类:
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/