在类上定义__call__作为构造函数

时间:2017-08-14 17:12:55

标签: python-2.7 class

我试图以一种我不确定影响的方式使用__call__

我使用基本代码数据时使用 import 从模块返回任意项目,如下所示:

try:
    mod = __import__(mod_name, globals(), locals(), [object_name])
finally:
    sys.path.remove(search_folder)

# object_name is a global variable in the module
return getattr(mod, object_name)

目前,每个模块都会定义一个类和一个函数。有问题的函数只是创建模块中定义的同一个类的新实例,将所有给定的参数传递给类构造函数。

为了避免复制/粘贴此函数,仅更改对类的调用,我使用调用方法定义了一个超类,并在该方法中调用了相同的类构造函数,就像这样:

class foobar(Object):
    def __init__(self, one, two):
        self.one = one
        self.two = two
    def __call__(cls, one, two):
        return cls(one, two)

它似乎正在处理我的测试案例,但我不确定使用此类设计的影响。 我应该补充一点,我有限制不更改当前的基本代码(我首先尝试使用@staticmethod,但它没有工作)。

另一方面,我没有要求将模块定义为(具有__call__方法的类),主要目标是应用DRY。我不熟悉Python元编程,也许它会是一个更优雅的解决方案?

0 个答案:

没有答案