「包裝」是指對乙個已經存在的物件進行系定義加工。
實現授權是包裝的乙個特性。包裝乙個型別通常是對已存在的型別進行一些自定義定製,這種做法可以新建,修改,或刪除原有產品的某些功能,而其他的保持不變。授權的過程,其實也就是所有的更新功能都交給新類的自定義的某部分功能來處理,但已存在的功能就授權給物件的預設屬性。
實現授權的關鍵點是覆蓋__getattr__()方法,在**中包含乙個對getattr()內建函式的呼叫,呼叫getattr()得到預設物件的屬性,並返回它以便訪問或者呼叫。
用組合的方式完成授權。
class cpu:#定義乙個cpu類def __init__(self,cpubrand,cpuprice):#cpu的屬性有品牌、**等
self.cpubrand=cpubrand
self.cpuprice=cpuprice
def calc(self):
print("cpu是電腦的大腦,你能進行大量的計算")
class mainboard:#定義乙個主機板類
def __init__(self,mbprice,mbsize):#主機板的屬性有**和型號
self.mbprice=mbprice
self.mbsize=mbsize
def connect(self):
print("主機板類似於人類的脊椎神經,它能夠將顯示卡、音效卡等裝置聯絡起來")
class computer:#定義乙個電腦類
def __init__(self,comprice,combrand,cpuprice,cpubrand,mbprice,mbsize):
self.comprice=comprice
self.combrand=combrand
self.cpu=cpu(cpuprice,cpubrand)
self.mainboard=mainboard(mbprice,mbsize)
def play_game(self):
print("嘿嘿,我們可以用電腦來玩遊戲啊")
def __getattr__(self, item): 這一步是實現授權的方式return getattr(self.cpu,item)
com=computer(6999,"三星",2345,"intel",1800,'b53')com.calc()
#com.calc()方法的呼叫方式,首先,他會從com的屬性字典去查詢calc屬性,發現該例項屬性中不存在,然後去computer類的屬性字典去查詢calc屬性,發現也不存在,就觸發了__getattr__()方法,
__getattr__()一執行,就會呼叫getattr(self.cpu,"calc")方法的執行,得到乙個記憶體位址傳給了com.calc,然後執行。
python許可權授權 Python包裝授權
1 什麼是包裝 coding utf 8 包裝類,就是給被包裝的類加個殼 被包裝內實現殼的內部,而包裝內提供殼的外部 介面 有點類似於繼承關係,不過也不完全時,因為通過繼承也可以實現包裝效果,不使用繼承同樣可以實現包裝效果。下面通過乙個例子來展示 包裝的概念 class packagelist ob...
python包裝和授權
首先了解什麼是包裝和授權。我們知道,物件導向程式設計中有乙個理念就是封裝,而實際上物件導向也讓程式設計師在使用一些類 自己定義或則別人定義 物件的時候非常方便。包裝就是乙個希望將某個物件 或類 進行重新打包,裝換成另外一種更適合當前使用場合的對外介面。相似娛樂界對明星的包裝一樣,其實本質沒有什麼改變...
類的包裝和授權
包裝 繼承基類,基於已存在的型別進行定製,進行二次加工 class list list def if type object is str else print 必須是字串型別 l1 list hello ss print l1 授權 包裝的乙個特性,包裝的型別通常是對以存在的型別進行定製,新建,修...