實現授權的關鍵點就是覆蓋__getattr__()方法,在**中包含乙個對getattr()內建函式的呼叫。
特別呼叫getattr()以得到預設物件屬性(資料屬性或者方法)並返回它以便訪問或呼叫。
特殊方法__getattr__()的工作方式是,當搜尋乙個屬性時,任何區域性物件首先被找到(定製的物件)。如果搜尋
失敗了,則__getattr__()會被呼叫,然後呼叫getattr()得到乙個物件預設行為。
當引用乙個屬性時,直譯器將試著在區域性命名空間中查詢那個名字,比如乙個自定義的方法或區域性例項屬性。
如果沒有在區域性字典中找到,則搜尋類名命名空間,以防乙個類屬性被訪問。最後,如果兩類搜尋都失敗了,
搜尋則對原物件開始授權請求,此時,__getattr__()會被呼叫。
授權(也是一種包裝,關鍵點是覆蓋__getattr__方法)
基於基本型別定製自己的型別
import time
class filehandle:
def __init__(self,filename,mode='r',encoding='utf-8'):
# self.filename=filename
self.file=open(filename,mode,encoding=encoding) #組合
self.mode=mode
self.encoding=encoding
def write(self,line):
print('------------>',line)
t=time.strftime('%y-%m-%d %x')
self.file.write('%s %s' %(t,line))
def __getattr__(self, item):
# print(item,type(item))
# self.file.read
return getattr(self.file,item)
f1=filehandle('a.txt','w+')
# print(f1.file)
# print(f1.__dict__)
# print('==>',f1.read) #觸發__getattr__
# print(f1.write)
f1.write('1111111111111111\n')
f1.write('cpu負載過高\n')
f1.write('記憶體剩餘不足\n')
f1.write('硬碟剩餘不足\n')
# f1.seek(0)
# print('--->',f1.read())
包裝
python許可權授權 Python包裝授權
1 什麼是包裝 coding utf 8 包裝類,就是給被包裝的類加個殼 被包裝內實現殼的內部,而包裝內提供殼的外部 介面 有點類似於繼承關係,不過也不完全時,因為通過繼承也可以實現包裝效果,不使用繼承同樣可以實現包裝效果。下面通過乙個例子來展示 包裝的概念 class packagelist ob...
python包裝和授權
首先了解什麼是包裝和授權。我們知道,物件導向程式設計中有乙個理念就是封裝,而實際上物件導向也讓程式設計師在使用一些類 自己定義或則別人定義 物件的時候非常方便。包裝就是乙個希望將某個物件 或類 進行重新打包,裝換成另外一種更適合當前使用場合的對外介面。相似娛樂界對明星的包裝一樣,其實本質沒有什麼改變...
python類 包裝 授權
包裝 是指對乙個已經存在的物件進行系定義加工。實現授權是包裝的乙個特性。包裝乙個型別通常是對已存在的型別進行一些自定義定製,這種做法可以新建,修改,或刪除原有產品的某些功能,而其他的保持不變。授權的過程,其實也就是所有的更新功能都交給新類的自定義的某部分功能來處理,但已存在的功能就授權給物件的預設屬...