gpt4 book ai didi

python - 为什么 Python 的内联类方法与元类定义的方法行为不同

转载 作者:太空狗 更新时间:2023-10-30 02:35:52 25 4
gpt4 key购买 nike

classmethod,无论是内联定义还是作为 元类 的一部分,都可以始终在类型上调用:

class eggs( type ):
def f1( cls ):
print( "eggs" )


class spam( metaclass = eggs ):
@classmethod
def f2( cls ):
print( "spam" )


f = spam()
type(f).f2() #--> spam
type(f).f1() #--> eggs

但是,元类中定义的 classmethod 似乎无法在实例上调用:

f.f2() #--> spam
f.f1() #--> AttributeError

这是为什么?

最佳答案

类是其元类的实例;您可以在类本身上调用元类定义的方法(因为它是元类的实例),但它们对类的实例不可用(因为它们不是元类的实例)。

这是故意的;有一些为类本身提供行为的用例,这些用例不能与类实例的特性混淆,就是这样。

关于python - 为什么 Python 的内联类方法与元类定义的方法行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57626265/

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