5

我经常需要检查一个类的实例是否具有属性,如果该属性存在,则与它的值进行比较。除了以下还有没有别的办法?

if house.garage:
    if house.garage == '3 car':
        # do something with house.garage
4

2 回答 2

6

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

if getattr(house, 'garage', "") == '3 car':
    # proceed

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

于 2012-08-10T00:46:19.587 回答
5

您可以按照 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
于 2012-08-09T23:40:48.730 回答