@property
と組み合わせると、とにかく運命づけられます__getattr__
:
class Paradise:
pass
class Earth:
@property
def life(self):
print('Checking for paradise (just for fun)')
return Paradise.breasts
def __getattr__(self, item):
print("sorry! {} does not exist in Earth".format(item))
earth = Earth()
try:
print('Life in earth: ' + str(earth.life))
except AttributeError as e:
print('Exception found!: ' + str(e))
次の出力が得られます。
Checking for paradise (just for fun)
sorry! life does not exist in Earth
Life in earth: None
あなたの本当の問題が呼び出しにあったときParadise.breasts
。
__getattr__
AtributeError
anが立ち上がったときに常に呼び出されます。例外の内容は無視されます。
悲しいことに、与えられたこの問題に対する解決策はありません( が定義されているという理由だけで)hasattr(earth, 'life')
が返されますが、実際の根本的な問題は にあるのに対し、属性 'life' は存在しなかったため到達されます。True
__getattr__
Paradise.breasts
@property
私の部分的な解決策は、例外にヒットすることが知られているブロックでtry-except を使用することAttributeError
です。