一件看似简单的事,我却无法回避。在
registry = {}
def register(cls):
registry[cls.__clsid__] = cls
print cls
return cls
@register
class Foo(object):
__clsid__ = "123-456"
def bar(self):
pass
c=Foo()
d=Foo()
e=Foo()
输出:
^{pr2}$
现在我希望decorator被称为3
时代。为什么它是否只被称为once
。在
Tags:
类修饰符被应用于类本身,并且仅在定义类时应用一次。基本上,它处理类定义并生成一个新类。在
所以你只处理一次。在
类decorator是在类被创建时应用的,而不是每次创建实例时。在
@register
行仅适用于class Foo(object):
语句。在导入模块时,只运行一次。在创建实例不需要重新运行class语句,因为实例只是保留对类的引用的对象(
type(c)
返回Foo
类对象);实例不是类对象的“副本”。在如果您想注册实例,那么您必须在
__init__
或类的__new__
方法中注册(也可以对其进行修饰)。__new__
负责创建实例,__init__
是用来初始化该实例的钩子。在相关问题 更多 >
编程相关推荐