メソッドが最初に属性が存在することを確認し、それ以外の場合は関数を呼び出してそれを計算する必要があるクラスがあります。次に、属性が ではないことを確認してNone
、それを使用していくつかの操作を実行します。わずかに異なる 2 つのデザインの選択肢があります。
class myclass():
def __init__(self):
self.attr = None
def compute_attribute(self):
self.attr = 1
def print_attribute(self):
if self.attr is None:
self.compute_attribute()
print self.attr
と
class myclass2():
def __init__(self):
pass
def compute_attribute(self):
self.attr = 1
return self.attr
def print_attribute(self):
try:
attr = self.attr
except AttributeError:
attr = self.compute_attribute()
if attr is not None:
print attr
最初の設計では、すべてのクラス属性が事前に設定されていることを確認する必要がNone
あります。これにより、冗長になる可能性がありますが、オブジェクトの構造も明確になります。
2 番目の選択肢は、より広く使用されているようです。ただし、私の目的 (情報理論に関連する科学計算) ではtry except
、このクラスが実際には他のクラスと対話せず、データを取得してさまざまなことを計算するだけであるため、どこでもブロックを使用するのは少しやり過ぎになる可能性があります。