检查存在和是否存在是一定的值

fre*_*reb 5 python

我经常需要检查类的实例是否具有属性,如果该属性存在,则与其值进行比较.除了以下之外没有办法吗?

if house.garage:
    if house.garage == '3 car':
        # do something with house.garage
Run Code Online (Sandbox Code Playgroud)

che*_*ner 6

您可以调用getattr,而不是使用点表示法,如果命名属性不存在,则可以返回默认值:

if getattr(house, 'garage', "") == '3 car':
    # proceed
Run Code Online (Sandbox Code Playgroud)

如果house没有名为'garage'的属性,getattr只需要评估一些不等于'3 car'的东西.

  • 人们并没有区分"属性不存在"和"属性具有虚假价值",这是非常重要的,因为如果`house.garage`实际上并不存在而另外两个答案会引发异常没有. (2认同)

Mik*_*rov 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
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)