[Python3] 如何装饰类中的类方法或静态方法
程序员文章站
2022-06-01 20:20:16
...
Talk is cheap
code is Here:
#普通装饰器(装饰函数和类)
def deco111(func_or_cls):
def wrap(*args, **kwargs):
print(type(func_or_cls))
return func_or_cls(*args, **kwargs)
return wrap
#装饰器中的self关键字使用(动态访问类中的其他方法/属性)
def deco222(func_or_cls):
def wrap(self, *args, **kwargs): # self 关键字专门接收类或实例对象
print(type(func_or_cls))
if func_or_cls.__name__ == 'x4':
if hasattr(self, 'x1'):
self.x1() #动态调用类中的方法
print(self.a) #以及属性
return func_or_cls(self, *args, **kwargs)
return func_or_cls(self, *args, **kwargs)
return wrap
class X:
a = 666
@classmethod
@deco111
def x1(self):
print(333)
@deco111
@classmethod
def x2(cls):
print(123)
@deco111
@staticmethod #如果要对静态方法和类方法进行装饰,
# 要将@staticmethod或classmethod的帽子戴在最上面,装饰器的执行是从下到上的
def x3(self):
print(456)
@classmethod
@deco222 #使用第二个装饰器
def x4(self):
print(789)
X.x1() #正常
# X.x2() #异常 'classmethod' object is not callable
# X.x3() #异常 'staticmethod' object is not callable
X().x4() #正常
上一篇: 数据结构中的线性表(线性数据)
下一篇: Python 装饰器
推荐阅读
-
Python3.0中普通方法、类方法和静态方法的比较
-
基于Python 装饰器装饰类中的方法实例
-
python中的实例方法、静态方法、类方法、类变量和实例变量浅析
-
JSP中如何通过JSP调用类(.java)中的方法
-
PowerShell中调用.NET对象的静态方法、静态属性和类方法、类属性例子
-
java基础 静态 static 问在多态中,子类静态方法覆盖父类静态方法时,父类引用调用的是哪个方法?
-
JavaScript中class类的静态方法、普通方法与构造方法详解
-
C#中的静态成员、静态方法、静态类介绍
-
在C#的类或结构中重写ToString方法的用法简介
-
Python3.0中普通方法、类方法和静态方法的比较