如何在Python中判斷物件是否具有某個屬性?


Python 是一種面向物件的程式語言,這裡的屬性被稱為物件的特性。我們可以使用不同的方法來檢查物件是否具有某個屬性。

要檢查物件是否包含特定屬性,可以使用 hasattr() 方法和 getattr() 方法。如果要獲取所有現有屬性,可以使用 dir() 方法。(瞭解更多關於Python目錄的資訊:Python 目錄教程)

首先建立一個帶有兩個屬性的 Python 虛擬類,然後將其賦值給一個物件,本文將始終引用該物件。

class DummyClass():
    var1 = 'Value1'
    var2 = 2

obj = DummyClass()

直接訪問屬性

在這個例子中,我們嘗試直接訪問物件的屬性,如果屬性不存在,可能會得到一個 AttributeError。如果我們沒有得到 AttributeError,那麼就知道物件具有該屬性。

示例

對於上述示例,物件不包含屬性“a”,但包含“var1”、“var2”屬性。

class DummyClass():
    var1 = 'Value1'
    var2 = 2

obj = DummyClass()
print(obj.var1)
print(obj.var2)
print(obj.a)

輸出

Value1
2
Traceback (most recent call last):
  File "/home/cg/root/57371/main.py", line 8, in 
    print(obj.a)
AttributeError: 'DummyClass' object has no attribute 'a'

使用 getattr() 方法訪問屬性

與直接訪問屬性類似,getattr() 方法也返回命名屬性的值(如果存在),如果屬性不存在則返回 AttributeError

語法

getattr(object, name[, default])

此函式有三個引數:要查詢其屬性的物件名稱、要檢查的屬性名稱,以及最終的 [, default],它接受一個預設引數,如果屬性不存在,則列印該引數,而不是生成 AttributeError

示例

getattr() 方法返回現有屬性的值,併為不存在的屬性丟擲預設引數或 AttributeError

print(getattr(obj, 'var1', 'Attribute doesn't exist'))
print(getattr(obj, 'var2', 'Attribute doesn't exist'))
print(getattr(obj, 'a', 'Attribute doesn't exist'))
print(getattr(obj, 'a'))

輸出

Value1
2
Attribute doesn't exist
Traceback (most recent call last):
  File "/home/cg/root/17209/main.py", line 9, in 
    print(getattr(obj, 'a'))
AttributeError: 'DummyClass' object has no attribute 'a'

使用 hasattr() 方法訪問屬性

hasattr() 方法檢查物件是否具有特定屬性。hasattr() 方法是使用 getattr() 方法實現的。

語法

hasattr(object, name )

此函式有兩個引數:物件的名稱和要檢查的屬性名稱。並返回一個布林值(True/False)。如果物件中存在該屬性,則返回 'True',否則返回 'False'。

示例

obj 方法不包含“a”屬性,因此返回 False。對於 var1var2 屬性,它返回 True 作為輸出。

class DummyClass():
    var1 = 'Value1'
    var2 = 2

obj = DummyClass()   
print(hasattr(obj, 'var1'))
print(hasattr(obj, 'var2'))
print(hasattr(obj, 'a'))

輸出

True
True
False

使用 dir() 方法訪問所有現有屬性

dir() 方法返回一個列表,其中包含物件的所有屬性,它還會返回包含在 __dict__ 屬性中的鍵。

語法

dir(object)

對於某些物件,dir() 的結果可能不準確,因為其功能可能已使用 __getattr__ 方法修改。

示例

dir() 方法返回所有現有屬性的列表。

class DummyClass():
    var1 = 'Value1'
    var2 = 2

obj = DummyClass()   
print(dir(obj))

輸出

['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'var1', 'var2']

更新於:2023年8月29日

22K+ 次瀏覽

啟動您的 職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.