サブクラスごとにのみ計算できる計算値にアクセスする必要があるクラスがあります。この計算は安くはありません。サブクラスのインスタンス化が多いため、この値をサブクラスごとに1回だけ計算したいと思います。
私は本当に好きではない2つの解決策を考えることができます:
どちらの親クラスにも@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
…もっといいものはありますか?