我试图以一种我不确定影响的方式使用__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元编程,也许它会是一个更优雅的解决方案?