什么是创建工厂方法的 pythonic 方式?

问题描述 投票:0回答:0

我有一个类,我更希望人们调用工厂方法来创建类的实例,而不是直接实例化类。

使用工厂方法的几个不同原因之一是我们可以使用

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
并从一个工厂方法)

python python-3.x factory factory-pattern
© www.soinside.com 2019 - 2024. All rights reserved.