如何在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, inprint(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, inprint(getattr(obj, 'a')) AttributeError: 'DummyClass' object has no attribute 'a'
使用 hasattr() 方法訪問屬性
hasattr() 方法檢查物件是否具有特定屬性。hasattr() 方法是使用 getattr() 方法實現的。
語法
hasattr(object, name )
此函式有兩個引數:物件的名稱和要檢查的屬性名稱。並返回一個布林值(True/False)。如果物件中存在該屬性,則返回 'True',否則返回 'False'。
示例
obj 方法不包含“a”屬性,因此返回 False。對於 var1、var2 屬性,它返回 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']
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP