@函數名(類的描述符)相當於fuc = decorator(fuc)
裝飾器:
def deco(fuc):
print('============')
return fuc
@deco
def foo():
print('foo函數正在執行')
foo()
利用描述符自定製property
'''
遇到問題沒人解答?小編建立了一個Python學習交流QQ羣:778463939
尋找有志同道合的小夥伴,互幫互助,羣裡還有不錯的視訊學習教學和PDF電子書!
'''
class Decorator:
def __init__(self, fuc):
self.fuc = fuc
def __get__(self, instance, owner):
print('這裏是get')
return self.fuc(instance)
class Room:
def __init__(self, width, length):
self.length = length
self.width = width
@Decorator# area = Decorator(area)
def area(self):
print('執行了area函數')
return self.length*self.width
room = Room(1,2)
print(room.area)
內建的裝飾器
內建的裝飾器有三個,分別是staticmethod、classmethod和property,作用分別是把類中定義的實體方法變成靜態方法、類方法和類屬性。由於模組裡可以定義函數,所以靜態方法和類方法的用處並不是太多,除非你想要完全的物件導向程式設計。而屬性也不是不可或缺的,Java沒有屬性也一樣活得很滋潤。從我個人的Python經驗來看,我沒有使用過property,使用staticmethod和classmethod的頻率也非常低。