檢查 Python 物件是否具有某屬性
物件導向的程式設計圍繞類和物件的概念展開。
每個類都有可以稱為屬性的方法和屬性。一個物件可以獲取一個類的屬性,每個物件也可以有它的屬性。瞭解物件具有哪些屬性是必要的。
無法在大量程式碼中手動檢查物件中的屬性。本文將展示檢查物件屬性的不同方法。
在 Python 中使用 hasattr()
方法檢查屬性
hasattr()
函式檢查物件是否具有特定屬性。如果函式找到屬性,則返回 true
;否則,它返回 false
。
語法:
hasattr(object_name, attribute_name)
這個函式有兩個引數——物件
的名稱和我們要檢查的屬性
。該函式根據是否找到屬性將輸出作為布林值 true
或 false
給出。
假設我們有一個名為 Cake
的類。我們在這個類中定義了三個屬性——best_cake
、best_flavor
和 cost
。然後,我們建立 cake_object
作為此類的物件。
現在,要檢查該物件是否具有屬性 best_cake
,我們使用 hasattr()
方法。將類的名稱和此屬性作為引數傳遞給此函式。
class Cake:
best_cake = "Choco Lava"
best_flavor = "Vanilla"
cost = 2500
cake_object = Cake()
print(hasattr(Cake, "best_cake"))
輸出:
True
由於 best_cake
屬性屬於物件 cake_object
,我們得到 True
作為輸出。
現在看看如果我們將 quantity
作為屬性名稱會發生什麼。
class Cake:
best_cake = "Choco Lava"
best_flavor = "Vanilla"
cost = 2500
cake_object = Cake()
print(hasattr(Cake, "quantity"))
輸出:
False
由於屬性 quantity
不存在,我們得到 False
作為輸出。
在 Python 中將 hasattr()
函式與 If-Else
塊一起使用
另一種使用 hasattr()
函式的方法是將它與 if-else
塊一起使用。當屬性存在時,hasattr()
函式返回 true
。
因此,if
塊執行並列印屬性的值。但是,如果該屬性不存在,則返回的值將是 false
,然後執行 else
塊。
class Cake:
best_cake = "Choco Lava"
best_flavor = "Vanilla"
cost = 2500
cake_object = Cake()
if hasattr(Cake, "quantity"):
print(Cake.quantity)
else:
print("Whoops, no such attribute exists!")
輸出:
Whoops, no such attribute exists!
我們在 if
塊內搜尋屬性。由於該屬性不存在,該函式返回 false
並進入 else
塊。在 else
塊中,我們指定一個簡單的列印語句作為輸出。
在 Python 中使用 getattr()
函式檢查屬性
getattr()
函式在屬性不存在時返回預設值。getattr()
函式的工作方式與前一個相同。
語法:
getattr(object_name, attribute_name, default_value)
getattr()
函式接受三個引數 - 物件、屬性和屬性不存在時的預設值。
比如說,我們必須找到 cake_object
物件的 quantity
屬性。在不指定預設引數的情況下,讓我們使用 getattr()
函式。
class Cake:
best_cake = "Choco Lava"
best_flavor = "Vanilla"
cost = 2500
cake_object = Cake()
print(getattr(Cake, "quantity"))
輸出:
AttributeError: type object 'Cake' has no attribute 'quantity'
getattr()
函式在這裡丟擲異常。
現在,讓我們指定一個在屬性不存在時應該列印的預設引數。這個預設引數可以是一個簡單的訊息。
class Cake:
best_cake = "Choco Lava"
best_flavor = "Vanilla"
cost = 2500
cake_object = Cake()
print(getattr(Cake, "quantity", "Attribute not found"))
輸出
Attribute not found
我們從預設引數而不是任何異常或錯誤中獲取訊息。
將 Getattr()
函式與 Try-Except
塊一起使用
還有另一種使用 getattr()
函式的方法。使用 try-catch
塊來檢查屬性的存在。這個想法是在 try
塊中包含 getattr()
函式。
如果該屬性存在,我們將列印其值。否則,將丟擲 AttributeError
。我們可以在 catch
塊中處理此異常並使用 print 語句列印錯誤訊息。
在本例中,我們在 try
塊中搜尋 quantity
屬性。我們沒有在 getattr()
函式中指定預設引數。
這是因為我們在 except
塊內處理錯誤。
class Cake:
best_cake = "Choco Lava"
best_flavor = "Vanilla"
cost = 2500
cake_object = Cake()
try:
print(getattr(Cake, "quantity"))
except AttributeError:
print("Whoops, this attribute is not present!")
輸出:
Whoops, this attribute is not present!
我們不能像 getattr()
函式那樣將 hasattr()
函式與 try-catch
塊一起使用。這是因為 hasattr()
函式返回布林值而不是異常。
總結
我們討論了在 Python 中查詢屬性是否存在於物件中。我們使用了兩個函式 - hasattr()
和 getattr()
來實現這一點。
我們學會了將 hasattr()
函式與 if-else
塊以及 getattr()
函式與 try-except
塊結合。