python中面向切片程式設計(AOP)和裝飾器

2020-08-12 16:30:05

@函數名(類的描述符)相當於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的頻率也非常低。