天天看點

類使用裝飾器,把類作一個裝飾器。

一、在了解類的裝飾器之前應該先看一下函數的裝飾器:

def foo(fn):
    def bar(a):
        fn(a*(a-1))
        print(a)
        return fn(a*(a-1))
    return bar
@foo
def my_test(a):
    a=a-1
    print(a)
print(my_test)
my_test(10)
           

列印結果:

類使用裝飾器,把類作一個裝飾器。

函數的裝飾器是對函數的參數進行加工或者驗證…

下面看一下類的裝飾器:

def cls_decorator(**kwargs):            #支援傳入參數(屬性和對應的值),字典形式
    def deco(cls):
        for key,val in kwargs.items():
            setattr(cls,key,val)        #給類設定對應的屬性和值
        return cls
    return deco

@cls_decorator(name='Menawey',age=24,gender='male')        # 1 運作cls_decorator(...),傳回deco;2 @deco===> Peolple = deco(People)
#相當于給People類設定了name、age、gender屬性
class People:
    pass

print(People.__dict__)                                   #檢視被裝飾過的類的屬性字典
           

列印結果:

類使用裝飾器,把類作一個裝飾器。

這裡給people添加了屬性,同樣可以修改屬性。

def ddt(cls):
    cls.name = 'zs'
    print(cls)
    return cls
@ddt
class TestAddApi():
    def __init__(self,name):
        self.name = name
        print(TestAddApi.__name__)
        print(TestAddApi.name)
ls = TestAddApi('ls')
           

這裡可以給每一個執行個體化的對象進行加工。也就是當你需要給每一個學生創造一個對象或者為每個測試用例建立一個對象的時候。

寫的不好,還請多多指導。