class My: def __init__(self, die, func): self.die = die # self.die 是一个函数对象,它保存了被装饰的函数 self.func = func def __call__(self, *args, **kwargs): print("this is call ") # 添加新的功能 self.die() # 在 __call__ 方法中,通过调用 self.() 执行被装饰的函数 def __call__(self, *args, **kwargs): print("this is func ") # 添加新的功能 self.func() # 在 __call__ 方法中,通过调用 self.() 执行被装饰的函数 @My def test(): print("test 。。。。。。") test()
时间: 2024-03-04 22:50:36 浏览: 169
这段代码是一个装饰器的例子。装饰器是一个函数,它接收一个函数作为参数,并返回一个新的函数。在这个例子中,装饰器被定义为一个类 My,它接收一个函数对象作为参数,并保存在 self.die 中。然后,My 类的 __call__ 方法被定义为添加新的功能,并通过调用 self.die() 执行被装饰的函数。在这个例子中,被装饰的函数是 test(),它被装饰器 My 修饰。当 test() 被调用时,装饰器 My 的 __call__ 方法被调用,打印出 "this is call ",然后调用被装饰的函数 test(),打印出 "test 。。。。。。"。
相关问题
# 定义父类 class initial(object): def __init__(self): print ('This print is from initial object') # 定义父类参数 self.param = 3 # 定义父类函数 def func(self): return 1 # 定义子类 class new(initial): def __init__(self): print ('This print is from new object') # 打印子类函数值 print (self.func()) # 执行父类初始化函数 super(new, self).__init__() # 打印父类参数值 print(self.param) self.param = 4 # 定义子类函数 def func(self): return 2 if __name__ == '__main__': new()
这段代码的作用是定义一个父类 initial 和一个子类 new,其中子类 new 继承了父类 initial。在子类 new 的初始化函数中,先打印出子类函数值,然后调用了父类的初始化函数,并打印出了父类参数值。最后修改了子类参数的值。同时,子类 new 重写了父类函数 func,返回了一个不同的值。
在主程序中创建了一个子类 new 的实例,会先打印出子类函数值和子类初始化函数中的 print 语句,然后执行父类初始化函数并打印出父类参数值。最后再修改子类参数的值。
编写一个类装饰器,用于计算被装饰函数的执行时间。 class MeasureTime: def __init__(self, func): self.func = func def __call__(self, *args, **kwargs): start_time = time.time() result = self.func(*args, **kwargs) end_time = time.time() execution_time = end_time - start_time print(f"Method {self.func.__name__} executed in {execution_time:.4f} seconds.") return result
非常好的问题!你的问题提供了一个很好的示例,可以向其他人展示如何编写类装饰器。下面是一个示例代码,演示了如何使用类装饰器来测量函数的执行时间:
```
import time
class MeasureTime:
def __init__(self, func):
self.func = func
def __call__(self, *args, **kwargs):
start_time = time.time()
result = self.func(*args, **kwargs)
end_time = time.time()
execution_time = end_time - start_time
print(f"Method {self.func.__name__} executed in {execution_time:.4f} seconds.")
return result
@MeasureTime
def my_function():
time.sleep(1)
my_function()
```
在这个例子中,我们定义了一个名为`MeasureTime`的装饰器类,它采用一个函数作为其唯一参数。在`__call__`方法中,我们记录了函数执行的开始时间和结束时间,并计算了函数的执行时间。最后,我们打印出函数的名称和执行时间,并返回函数的结果。
在我们的示例中,我们使用`@MeasureTime`语法将`MeasureTime`类应用于`my_function`函数。这意味着当我们调用`my_function`时,实际上会调用`MeasureTime`的`__call__`方法,该方法会测量函数的执行时间并打印出结果。
希望这个示例可以帮助你理解类装饰器的工作原理!
阅读全文