提问人:gld.g 提问时间:8/7/2023 最后编辑:Markgld.g 更新时间:8/7/2023 访问量:56
__call__方法作为类方法不起作用?
__call__ method as classmethod not working?
问:
我想知道为什么当我将函数声明为类方法时,我的类中的调用方法不起作用。 下面是一个示例:
class Foo:
bar = 0
@classmethod
def __call__(cls):
print(cls.bar)
当我使用 Foo() 时,它不会打印出栏。为什么?
答:
2赞
user2357112
8/7/2023
#1
@classmethod
当方法查找找到方法时不会更改。它只会更改找到方法时绑定的参数。
穿上你的意味着,如果你调用你的类的实例:@classmethod
__call__
Foo
foo = Foo() # not here
foo() # here
第一个参数将是类,而不是实例。__call__
穿上你的遗嘱并不意味着该方法被用于调用自己。在查找实现语言功能的魔术方法时,Python 几乎在所有情况下都会绕过普通方法查找过程,并通过对象类的 MRO 执行直接搜索。除其他原因外,这避免了在更常见的情况下使用 for,其中 is 实例方法,并且从未打算被调用来实现操作本身。@classmethod
__call__
Foo
Foo.__call__
Foo()
Foo.__call__
Foo()
对于一个调用,对象是它自己,它的类是,所以查找会发现,绕过直接在 上定义的任何内容。Foo()
Foo
type
__call__
type.__call__
Foo
评论