我经常需要检查一个类的实例是否具有属性,如果该属性存在,则与它的值进行比较。除了以下还有没有别的办法?
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' 的属性,getattr
则只需要评估为不等于 '3 car' 的东西。
您可以按照 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