from types import FunctionType
def outer(my_class):
class Inner(my_class):
def __init__(self):
for value in my_class.__dict__.values(): # 遍历被装饰类(myclass)的所有类方法
if isinstance(value, FunctionType):
self.set_func_method(value) # 找到类下面所有类方法,调用重写函数方法
def set_func_method(self, func):
# @decorate_func 此处可以添加装饰器函数
def mew_func(*args, **kwargs):
# 此处可以对函数参数进行人为干预 *args, **kwargs 注意对应func(self, *args, **kwargs)要修改对应的处理后参数
try:
return func(self, *args, **kwargs)
except Exception:
print('error')
setattr(self, func.__name__, mew_func) # 重写类的函数方法
return Inner
@outer
class MyClass:
def name(self,s):
print(s)
raise TypeError('11111')
res = MyClass().name(1)
print(res)
>>>error
>>>None
python通过装饰类装饰类下所有方法(2)
最新推荐文章于 2022-10-25 08:00:00 发布