程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python魔法方法(12):__getattr __(self, item) 方法

編輯:Python

Python 的對象天生擁有一些神奇的方法,它們總被雙下劃線所包圍,它們是面向對象的 Python 的一切。它們是可以給你的類增加魔力的特殊方法,如果你的對象實現(重載)了某一個魔法方法,那麼這個方法就會在特殊的情況下自動被 Python 所調用。

功能

該方法定義了用戶試圖訪問一個不存在的屬性時的行為。

參數

self 指對象本身,item 是一個字符串,代表欲訪問屬性的名字。

返回值

默認為 None,返回值會自動返回給觸發它的對象。

示例

class MyTest:
def __getattr__(self, item):
return 18
sample = MyTest()
print(sample.age)
# 使用 '.' 操作符訪問對象時觸發此方法
print(sample.__dict__)

當 __getattribute__ 和 __getattr__ 同時存在時,會先執行 __getattribute__ 方法,若該方法能正常返回一個值,那麼 __getattr__ 方法就不會被執行。若該方法沒有正常返回一個值(產生了異常(AttributeError)或屬性不存在),則 __getattr__ 方法就會在 __getattribute__ 之後被執行。
__getattr__()函數是特殊函數。它僅當屬性不能在實例的 __dict__ 或它的類,或者祖先類中找到時,才被調用。程序員主要用 __getattr__() 來實現類的靈活性,或者用它來做一些兜底的操作。絕大多數情況下,需要的是 __getattr__()。

示例:

class Count(object):
def __init__(self, min, max):
self.min = min
self.max = max
self.current = None
def __getattribute__(self, item):
print(type(item), item)
if item.startswith('cur'):
raise AttributeError
return object.__getattribute__(self, item)
obj1 = Count(1, 10)
print(obj1.min)
print(obj1.max)
print(obj1.current)


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved