Python學(xué)習(xí)筆記之getattr和hasattr用法示例詳解
1.getattr用法詳解
1.1 基本作用
getattr(object, name[, default])
用于動態(tài)獲取對象的屬性值。
object:要操作的對象。name:屬性名(字符串)。default(可選):如果屬性不存在,返回的默認(rèn)值(否則會拋異常)。
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實(shí)際上會調(diào)用對象的__getattribute__方法。- 如果找不到屬性且提供了
default,則返回default,否則拋出AttributeError。
2.hasattr用法詳解
2.1 基本作用
hasattr(object, name)
用于判斷對象是否有某個(gè)屬性。
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實(shí)際上會嘗試用getattr(object, name)獲取屬性。- 如果沒有拋出
AttributeError,就返回True,否則為False。
3. 二者區(qū)別與聯(lián)系
3.1 聯(lián)系
- 都用于動態(tài)操作對象屬性,底層都依賴于魔法方法
__getattribute__。
3.2 區(qū)別
getattr用于取值,可以設(shè)置默認(rèn)值。hasattr用于判斷屬性是否存在,不取值。
3.3 注意
?? 注意:
hasattr內(nèi)部實(shí)際上是 try-except 機(jī)制,屬性訪問可能觸發(fā)屬性的 getter 或 property 代碼塊!
4. 實(shí)用技巧與注意事項(xiàng)
4.1 實(shí)用技巧
- 用
getattr動態(tài)讀取屬性,適合反射場景(如 ORM、插件、配置讀取等)。 - 用
hasattr判斷屬性是否存在,避免代碼報(bào)錯(cuò)。
4.2 注意事項(xiàng)
- 如果屬性不存在且沒有傳遞
default,getattr會直接報(bào)錯(cuò)。 hasattr訪問屬性時(shí),帶有副作用時(shí)要小心(比如 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,同時(shí)會打印: 訪問了 y
print(getattr(d, 'y')) # 訪問了 y,輸出: 20
print(getattr(d, 'z', '不存在')) # 輸出: 不存在
6. 總結(jié)表
| 方法 | 作用 | 返回值 | 不存在時(shí)行為 |
|---|---|---|---|
| getattr | 獲取屬性值 | 屬性值/默認(rèn)值 | 拋 AttributeError/返回默認(rèn) |
| hasattr | 判斷屬性是否存在 | True/False | 返回 False |
到此這篇關(guān)于Python學(xué)習(xí)筆記之getattr和hasattr用法的文章就介紹到這了,更多相關(guān)Python getattr和hasattr用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python中g(shù)etattr函數(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中的應(yīng)用
相關(guān)文章
Python3.7實(shí)現(xiàn)驗(yàn)證碼登錄方式代碼實(shí)例
這篇文章主要介紹了Python3.7實(shí)現(xiàn)驗(yàn)證碼登錄方式代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02
Python實(shí)現(xiàn)8個(gè)概率分布公式的方法詳解
在本文中,我們將介紹一些常見的分布(均勻分布、高斯分布、對數(shù)正態(tài)分布等)并通過Python代碼進(jìn)行可視化以直觀地顯示它們,感興趣的可以學(xué)習(xí)一下2022-05-05
python中sub-pub機(jī)制實(shí)現(xiàn)Redis的訂閱與發(fā)布
本文主要介紹了python中sub-pub機(jī)制實(shí)現(xiàn)Redis的訂閱與發(fā)布,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
django認(rèn)證系統(tǒng) Authentication使用詳解
這篇文章主要介紹了django認(rèn)證系統(tǒng) Authentication使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
django實(shí)現(xiàn)前后臺交互實(shí)例
本篇文章主要介紹了django實(shí)現(xiàn)前后臺交互實(shí)例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08

