クラスのインスタンスにプロパティがあるかどうかを頻繁に確認し、そのプロパティが存在する場合は、その値と比較する必要があります。次のこと以外にそれをする方法はありませんか?
if house.garage:
if house.garage == '3 car':
# do something with house.garage
クラスのインスタンスにプロパティがあるかどうかを頻繁に確認し、そのプロパティが存在する場合は、その値と比較する必要があります。次のこと以外にそれをする方法はありませんか?
if house.garage:
if house.garage == '3 car':
# do something with house.garage
ドット表記を使用する代わりに、を呼び出すことができますgetattr
。これにより、名前付き属性が存在しない場合にデフォルト値を返すことができます。
if getattr(house, 'garage', "") == '3 car':
# proceed
house
'garage'という名前の属性がない場合は、'3car'getattr
と等しくないものに評価する必要があります。
Martin Fowlerが概説しているように、ここで「条件式を統合」できます:http ://sourcemaking.com/refactoring/consolidate-conditional-expression#permalink-15
基本的に、内部に別のifステートメントを含むifステートメントは、実際には1つのifステートメントであり、その間にandがあります。
if house.garage:
if house.garage == '3 car':
# do something with house.garage
になります
if house.garage and house.garage == '3 car':
# do something with house.garage