gpt4 book ai didi

Python 有时不会将类实例作为第一个参数传递 - 理解 __new__

转载 作者:行者123 更新时间:2023-11-30 23:38:25 27 4
gpt4 key购买 nike

我有一个具有如下功能的类:

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__ 的工作原理...我现在正在阅读

最佳答案

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

Source

更正的示例:

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

这将创建 MyClass 的实例而不是 cls。如果 MyClass 是 cls 的子类,那么它的 init 方法也会自动被调用(参见链接引用)

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com