由淺入深,走進Python裝飾器-----第五篇:進階--類裝飾類
阿新 • • 發佈:2019-05-02
__call__ def pytho print 裝飾類 code urn elf 屬性
**類裝飾器**
@類
類
4.1 用類裝飾器來擴展原函數( 增加屬性和方法 )
# 用類裝飾器來擴展原函數, 通過對象函數化觸發__call__方法,進行返回 class KuoZhan(): def __call__(self,cls): return self.newfunc(cls) def good(self): print("新增的方法!") def newfunc(self,cls): def in_newfunc(): cls.addpty = "新增的屬性" cls.good = KuoZhan.good # 此處返回的是一個實例化對象 return cls() return in_newfunc @KuoZhan() #1. KuoZhan() ==> obj 2. @KuoZhan()==> @obj ==> obj( ) 3. @KuoZhan() == obj( MyClass), ,觸發__call__ ,得到 in_newfunc class MyClass(): def func(self): print("我是原類的方法") # MyClass實際就是in_newfunc, MyClass() == in_newfunc() , 所以 obj = cls() obj = MyClass() obj.func() obj.good() print(obj.addpty) >>>我是原類的方法 >>>新增的方法啦! >>>新增的屬性
由淺入深,走進Python裝飾器-----第五篇:進階--類裝飾類