1. 程式人生 > 實用技巧 >Python3筆記042 - 7.8 裝飾器

Python3筆記042 - 7.8 裝飾器

第7章 面向物件程式設計

  • 7.1 面向物件概述
  • 7.2 類的定義
  • 7.3 類的例項化
  • 7.4 訪問限制
  • 7.5 繼承
  • 7.6 封裝
  • 7.7 多型
  • 7.8 裝飾器
  • 7.9 特殊方法

7.8 裝飾器

Python的類裝飾器:

# 典型場景:進行業務操作前需要先登入成功
def login(cls):
    print("登入成功")
    return cls


@login
class Model(object):
    def __init__(self):
        print("model has created")


if __name__ == '__main__':
    model = Model()

login即是裝飾器函式,輸入的cls是一個類,返回也是一個類。所以其實上文的類裝飾器就相當於:Model = login(Model)

繼承

'''
對於繼承關係,若f裝飾了類A,類B繼承了A,則產生B的物件時仍然會呼叫裝飾器f,但裝飾器f只會修飾類A。
'''
def decorator(num):
    print(num)

    def dec2(cls):
        print(cls)
        return cls

    return dec2


def decorator2(cls):
    print(cls)
    return cls


@decorator(1)
class Model(object):
    test_val = 0

    def __init__(self):
        pass


@decorator2
class SubModel(Model):
    def __init__(self):
        pass


if __name__ == '__main__':
    model = SubModel()
output:
1
<class '__main__.Model'>
<class '__main__.SubModel'>