我用的是python3。
我知道@classmethod装饰器。另外,我知道类方法可以从实例中调用。在class HappyClass(object):
@classmethod
def say_hello():
print('hello')
HappyClass.say_hello() # hello
HappyClass().say_hello() # hello
然而,我似乎不能动态地创建类方法并让它们从实例中被调用。假设我想要
^{pr2}$
我使用过cls.__dict__(这会产生异常),以及{}(这只会使thingie从类而不是实例中调用)。在
如果你问我为什么,我想做一个懒惰的类属性。但它不能从实例中调用。在@classmethod
def search_url(cls):
if hasattr(cls, '_search_url'):
setattr(cls, '_search_url', reverse('%s-search' % cls._meta.model_name))
return cls._search_url
可能是因为还没从班上叫到物业。。。在
总之,我想添加一个lazy,类方法,该方法可以从实例中调用。。。这能以一种优雅的方式实现吗?在
有什么想法吗?在
我是如何实现的
抱歉,我的例子很糟糕:\
不管怎样,最后我还是这样做了。。。在@classmethod
def search_url(cls):
if not hasattr(cls, '_search_url'):
setattr(cls, '_search_url', reverse('%s-search' % cls._meta.model_name))
return cls._search_url
而且setattr确实有效,但是我在测试它时犯了一个错误。。。在