我經常需要檢查一個類的實例是否有屬性,如果該屬性存在,請與其值進行比較。除了以下之外,沒有辦法去做嗎?檢查是否存在,是否存在,是否爲某個值
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
可以「合併條件表達式」所概述由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
而是使用點符號,你可以對getattr
一個電話,它可以返回默認值,如果指定的屬性不存在:
if getattr(house, 'garage', "") == '3 car':
# proceed
如果house
沒有名爲'garage'的屬性,getattr
只需要評估一些不等於'3 car'的東西。
人們沒有區分「屬性不存在」和「屬性有錯誤的價值」,這是非常重要的,因爲如果'house.garage'實際上並不存在,其他兩個答案會引發異常反對僅僅是None。 – Jake 2012-08-10 15:07:16
這是一個很好的答案,但另一種情況對我來說更常見。我通常在django模型中檢查外鍵。所以這個屬性總是存在的(是可點的),但有時它是無的,並且如果我嘗試訪問相關的模型屬性之一就會出錯。 – freb 2012-08-10 21:49:37