携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第25天,点击查看活动详情
0 环境
- 编辑器:pycharm或者vscode
- 系统版本:windows10
- python版本:3.9.6
1 类装饰器
以前我就有疑问,类有么有装饰器呢,但是很少在网上看到这样的文章,哪怕python的书籍也很少提到,直到我看到大佬的文章才了解了,原来可以这么个演变,其实和装饰器类似,而且正常我们也用不到,但是就是想去了解一下,对比一下,看看猪跑。
如下代码:set_age函数接收类和年龄,为该类设置全局变量,并且返回该类。现在回到main中,我们先调用了set_age函数,并且用Demo1变量接收了set_age的返回值(Demo类),通过Demo1()得到demo实例,类.AGE和实例.AGE最终的结果是一致的,如下图结果。
def set_age(cls, age):
cls.AGE = age
return cls
class Demo:
pass
if __name__ == '__main__':
Demo1 = set_age(Demo, 19)
demo = Demo1()
print(Demo1.AGE)
print(demo.AGE)
如下代码:我们继续改造,改成这种的,变量 = 函数(add)(1,2) --> 还有一种编写装饰器的方式@xxx,下面我才用@的方式编写。
外层age,wrap传入类,然后@绑定在,我们相传到set_age1上的类,并且在上面加个要传入的age值。就可以在main直接调用该类的类变量了,看着不明显可以转化为 TEST = set_age1(100)(TEST) print(Test.AGE)。
def set_age1(age):
def wrap(cls):
cls.AGE = age
return cls
return wrap
@set_age1(100)
class Test:
pass
if __name__ == '__main__':
print(Test.AGE)
这里是为了动态的获取类的名字,如下图,这里只是为了扩展或者说了解一下罢了。