【发布时间】:2021-05-10 05:47:46
【问题描述】:
这里有点失落。我正在尝试装饰一个类的所有方法,并使用解决方案here。我觉得我已经拥有了所有的部分(见下文),但是当我初始化类/调用它的方法时,什么都没有发生。
作为一个玩具示例,我有函数装饰器
def my_decorator(func):
def wrapper(*args):
print("Something is happening before the function is called.")
return func(*args)
print("Something is happening after the function is called.")
return wrapper
和类装饰器
def for_all_methods(decorator):
import inspect
def decorate(cls):
for name, fn in inspect.getmembers(cls, inspect.ismethod):
print(name, fn)
setattr(cls, name, decorator(fn))
return cls
return decorate
还有玩具课
@for_all_methods(my_decorator)
class Car:
def __init__(self):
self.wheels = 4
self.price=20000
self.mileage = 0
def drive(self, miles):
self.mileage += miles
def depreciate(self):
self.price-=0.1*self.mileage
当我初始化类时
c = Car()
或调用它的方法,它们没有被装饰。是什么赋予了?我觉得我一定错过了一些微不足道的事情。
【问题讨论】:
-
print(name, fn)打印出预期的结果吗? -
不,但如果我打电话给
for name, fn in inspect.getmembers(Car(), inspect.ismethod): print(name, fn),我会得到预期的结果。