Python學習筆記之getattr和hasattr用法示例詳解
更新時間:2025年08月12日 08:31:18 作者:一只野生的善逸
在Python中,hasattr()、getattr()和setattr()是一組內(nèi)置函數(shù),用于對對象的屬性進行操作和查詢,這篇文章主要介紹了Python學習筆記之getattr和hasattr用法的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
1.getattr用法詳解
1.1 基本作用
getattr(object, name[, default])
用于動態(tài)獲取對象的屬性值。
object:要操作的對象。name:屬性名(字符串)。default(可選):如果屬性不存在,返回的默認值(否則會拋異常)。
1.2 示例
class Person:
name = "Alice"
age = 20
person = Person()
print(getattr(person, "name")) # 輸出: Alice
print(getattr(person, "age")) # 輸出: 20
print(getattr(person, "gender", "女")) # 屬性不存在,輸出: 女
1.3 原理
getattr實際上會調(diào)用對象的__getattribute__方法。- 如果找不到屬性且提供了
default,則返回default,否則拋出AttributeError。
2.hasattr用法詳解
2.1 基本作用
hasattr(object, name)
用于判斷對象是否有某個屬性。
object:要檢查的對象。name:屬性名(字符串)。
返回值:
- 存在則返回
True,否則返回False。
2.2 示例
class Person:
name = "Alice"
person = Person()
print(hasattr(person, "name")) # 輸出: True
print(hasattr(person, "age")) # 輸出: False
2.3 原理
hasattr實際上會嘗試用getattr(object, name)獲取屬性。- 如果沒有拋出
AttributeError,就返回True,否則為False。
3. 二者區(qū)別與聯(lián)系
3.1 聯(lián)系
- 都用于動態(tài)操作對象屬性,底層都依賴于魔法方法
__getattribute__。
3.2 區(qū)別
getattr用于取值,可以設置默認值。hasattr用于判斷屬性是否存在,不取值。
3.3 注意
?? 注意:
hasattr內(nèi)部實際上是 try-except 機制,屬性訪問可能觸發(fā)屬性的 getter 或 property 代碼塊!
4. 實用技巧與注意事項
4.1 實用技巧
- 用
getattr動態(tài)讀取屬性,適合反射場景(如 ORM、插件、配置讀取等)。 - 用
hasattr判斷屬性是否存在,避免代碼報錯。
4.2 注意事項
- 如果屬性不存在且沒有傳遞
default,getattr會直接報錯。 hasattr訪問屬性時,帶有副作用時要小心(比如 property/自定義__getattr__)。
5. 綜合示例
5.1 示例代碼
class Demo:
def __init__(self):
self.x = 10
@property
def y(self):
print("訪問了 y")
return 20
d = Demo()
print(hasattr(d, 'x')) # True
print(hasattr(d, 'y')) # True,同時會打印: 訪問了 y
print(getattr(d, 'y')) # 訪問了 y,輸出: 20
print(getattr(d, 'z', '不存在')) # 輸出: 不存在
6. 總結(jié)表
| 方法 | 作用 | 返回值 | 不存在時行為 |
|---|---|---|---|
| getattr | 獲取屬性值 | 屬性值/默認值 | 拋 AttributeError/返回默認 |
| hasattr | 判斷屬性是否存在 | True/False | 返回 False |
到此這篇關于Python學習筆記之getattr和hasattr用法的文章就介紹到這了,更多相關Python getattr和hasattr用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:
- Python中getattr函數(shù)和hasattr函數(shù)作用詳解
- 詳解Python3 中hasattr()、getattr()、setattr()、delattr()函數(shù)及示例代碼數(shù)
- 全面了解Python的getattr(),setattr(),delattr(),hasattr()
- 詳解Python的hasattr() getattr() setattr() 函數(shù)使用方法
- 淺析Python中的getattr(),setattr(),delattr(),hasattr()
- 一文搞懂Python的hasattr()、getattr()、setattr()?函數(shù)用法
- 淺談python中的getattr函數(shù) hasattr函數(shù)
- python中hasattr()、getattr()、setattr()函數(shù)的使用
- 一次搞懂hasattr()/getattr()/setattr()在Python中的應用
相關文章
python中sub-pub機制實現(xiàn)Redis的訂閱與發(fā)布
本文主要介紹了python中sub-pub機制實現(xiàn)Redis的訂閱與發(fā)布,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-03-03
django認證系統(tǒng) Authentication使用詳解
這篇文章主要介紹了django認證系統(tǒng) Authentication使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-07-07

