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/