1
reorx 2013-08-09 10:11:04 +08:00
我只能想到用 metaclass,让所有的 classmethod 在定义时被替换成一个新的 classmethod,这个 classmethod 中执行了检查和原方法的代码。
http://gist.github.com/6190610.git http://gist.github.com/reorx/6190610 |
2
raquelken 2013-08-09 11:07:52 +08:00
创建一个classproperty
class classproperty(object): def __init__(self, clsattr): self.clsattr = classmethod(clsattr) def __get__(self, obj, objtype): return self.clsattr.__get__(obj, objtype)() class A(object): _name = None @classproperty def name(cls): if not cls._name: cls._name = 'something' return cls._name @classmethod def f(cls): print 'f', cls.name @classmethod def ff(cls): print 'ff', cls.name if __name__ == '__main__': A.f() A.name = 'something change' A.ff() |
3
raquelken 2013-08-09 11:08:25 +08:00
另外,你可以 pip search classproperty
|