首页 > 其他分享 >类装饰器

类装饰器

时间:2022-09-18 20:49:08浏览次数:59  
标签:__ 调用 函数 self func 装饰

2022-09-18

 类装饰器的定义:

  使用一个类作为一个装饰器,在类里面对已有函数添加其他功能。

类装饰器使用的一个实例:

 1 class MyDecorator(object):
 2     def __init__(self,func):
 3         self.__func = func
 4 
 5     def __call__(self, *args, **kwargs):
 6         print("课已讲完")
 7         self.__func()
 8 
 9 @MyDecorator
10 def show():
11     print("快要下课啦")
12 
13 show()

  说明:

    第10-11行,原来的函数

    第1-7行,定义了一个类装饰器,为原来的函数添加其他功能。注意:如果此时是类作为装饰器的话,之前装饰器中传入的函数现在应该放在的位置在“__init__”构造函数中。

    第3行,为了在下面的代码中调用func函数,所以此处要将传入的"func"参数作为一个属性。“self.__func”,在func前面加了两个下划线表示将该func属性作为一个私有属性。

    第5行,为了在下面函数调用中直接使用类对象名调用,使用此处要使用“__call__”,它的目的是将对象作为一个可调用的对象。

    第6行,增加的新的功能。

    第7行,调用“__func()”函数,注意,此处调用的是一个函数,而非上面的属性,因此要加上括号。因为是在类的内部调用的本类传入的参数,所以要使用“self”。

    第9行,类装饰器语法糖,表示给原来的函数增加新的功能。

运行结果图:

 

标签:__,调用,函数,self,func,装饰
From: https://www.cnblogs.com/isDaHua/p/16705642.html

相关文章

  • 带有参数的装饰器
    2022-09-18带有参数的装饰器的实质:因为装饰器是不能在带有参数,所以要定义带有参数的装饰器应该换一种思路。在装饰器的外面套一个函数,使用该函数返回这个装饰器。带......
  • 使用多个装饰器
    2022-09-18多个装饰器使用的实例:1#定义一个装饰器2defmake_p(func):3print("执行装饰器make_p")45definner():6#对已有函数增加......
  • dataclass装饰器
    简介根据定义dataclass时指"一个带有默认值的可变的namedtuple"简单来说,就是你定义一个很普通的类,@dataclass装饰器可以帮你生成__repr__、__init__等方法,就不用自己写......
  • 11.6面向对象的3个装饰器
    #比如计算学生得年龄,传生日#importtime##classStudent:##def__init__(self,name,birth):#self.birth=birth#self.name=name##@pro......
  • Python 装饰器
    Python装饰器假设我们想为已经编写的代码添加额外的功能,例如我们想在一个特殊的trycatch块中捕获任何错误,我们可以按如下方式进行。defsome_decorator(func):d......
  • go 闭包和装饰器
    闭包go中实现闭包需要依赖匿名函数packagemainimport("fmt")funcfoo(namestring)func(){returnfunc(){fmt.Println("hello",name)......
  • 普通函数、参数、匿名函数、高阶函数、递归函数、闭包、装饰器
    函数定义#定义函数deffn():print("这是函数内部")#调用fn()fn()#区分fn:这是真正意义上的函数本身fn():这是调用函数参数形参实参函数参数可有......
  • 设计模式之(7)——装饰设计模式
    定义:装饰设计模式允许向一个现有的对象添加功能,而不改变其结构(这就很符合程序设计的“开闭原则”),重点突出类功能的增强,属于结构型创建模式,这种模式创建了一个装饰类,用......
  • Flask 学习-32.flask_jwt_extended 自定义装饰器
    前言创建自己的装饰器来扩展此扩展提供的装饰器的功能。例如,您可能想要创建自己的装饰器来验证JWT是否存在以及验证当前用户是否是管理员。自定义装饰器flask_jwt_ext......
  • C# 装饰模式
    //Seehttps://aka.ms/new-console-templateformoreinformation/**个人理解你要往原有的东西上加东西Phone=装饰手机原材料Decorator=装饰手机中间人Xiao......