我有一个类,我需要访问只能按子类计算的计算值。这种计算并不便宜,而且由于子类有很多实例,我想每个子类只计算一次这个值。
我可以想到两个我不太喜欢的解决方案:
父类将有一个@classmethod
start()
将计算值的。这迫使我确定每个类的第一个实例化的精确位置,所以我已经排除了这个选项。
或者,这段代码:
class A(object):
@classmethod
def _set_cls_attribute(cls):
if hasattr(cls, 'big_attr'):
return
cls.big_attr = heavy_func(cls.VAL)
def __init__(self):
self._set_cls_attribute()
class B(A):
VAL = 'b'
class C(A):
VAL = 'c'
for _ in range(large_number):
b = B()
c = C()
我不喜欢使用hasattr
...有什么更好的吗?