我有一个类,我更希望人们调用工厂方法来创建类的实例,而不是直接实例化类。
使用工厂方法的几个不同原因之一是我们可以使用
functools.wrap
包装未修饰的可调用对象。
import inspect
class Decorator:
def __init__(self, kallable):
self._kallable = kallable
@classmethod
def make_decorator(kls, kallable):
wrapped_kallable = kls(kallable)
return functools.wrap(wrapped_kallable, kallable)
def __call__(self, *args, **kwargs):
func_name = self._kallable.__name__
func_name = inspect.currentframe().f_code.co_name
print("ENTERING FUNCTION ", func_name)
ret_val = self._kallable(*args, **kwargs)
print("LEAVING FUNCTION", self._kallable)
return ret_val
打印
"ENTERING FUNCTION "
是一件很愚蠢的事情,我想向您展示一个 minimal 可重现的例子,说明我正在尝试做的事情(创建一个装饰器类,它使用 functools.wrap
并从一个工厂方法)