我经常需要检查类的实例是否具有属性,如果该属性存在,则与其值进行比较.除了以下之外没有办法吗?
if house.garage:
if house.garage == '3 car':
# do something with house.garage
Run Code Online (Sandbox Code Playgroud)
您可以调用getattr,而不是使用点表示法,如果命名属性不存在,则可以返回默认值:
if getattr(house, 'garage', "") == '3 car':
# proceed
Run Code Online (Sandbox Code Playgroud)
如果house没有名为'garage'的属性,getattr只需要评估一些不等于'3 car'的东西.
你可以像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
Run Code Online (Sandbox Code Playgroud)
变
if house.garage and house.garage == '3 car':
# do something with house.garage
Run Code Online (Sandbox Code Playgroud)