我经常需要检查类的实例是否具有属性,如果该属性存在,则与其值进行比较。除了以下之外,没有办法做到吗?
if house.garage:
if house.garage == '3 car':
# do something with house.garage
答案 0 :(得分:6)
您可以调用getattr
,而不是使用点符号,如果命名属性不存在,则可以返回默认值:
if getattr(house, 'garage', "") == '3 car':
# proceed
如果house
没有名为' garage'的属性,getattr
只需要评估为不等于&#39; 3 car&#39;。< / p>
答案 1 :(得分:5)
您可以“合并条件表达式”,如Martin Fowler所述:http://sourcemaking.com/refactoring/consolidate-conditional-expression#permalink-15
基本上,任何包含if语句的if语句实际上只有1,如果语句带有和之间的话!
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