c z*_*c z 4 python metaclass class-method python-3.x
可以直接在类型上调用A classmethod,无论是内联定义还是in的一部分metaclass:
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
Run Code Online (Sandbox Code Playgroud)
但是,似乎classmethod无法在实例上调用元类中的定义:
f.f2() #--> spam
f.f1() #--> AttributeError
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
类是其元类的实例;您可以在类本身上调用元类定义的方法(因为它是元类的实例),但是它们对于类的实例不可用(因为它们不是元类的实例)。
这是故意的;有一些为类本身提供行为的用例,不能与类实例的功能混淆,仅此而已。
| 归档时间: |
|
| 查看次数: |
38 次 |
| 最近记录: |