【发布时间】:2015-09-07 00:27:23
【问题描述】:
当我动态导入派生类时,我需要在 python 中重写 __import__ 函数。 (我只能访问基类代码)。例如:
Servers=[]
class ServerBase(object):
name='' #name of the specific server class, for each server class
def __init__(self):
self.connected = False
self.name = self.__class__.__module__.capitalize()
Servers.append(self)
在导入派生类时,我需要调用基类的 __init__ 将其添加到 Servers[] 列表中,因此在主模块中我调用时:
__import__('DerivedClassName')
基 __init__ 将被调用
【问题讨论】:
-
为什么需要这个?为什么不直接使用生成派生类和实例的工厂函数?
-
看不出来,这跟
import有什么关系。 -
我无权访问派生类或导入该派生类的主函数(仅基类)
-
@AlexGill:您调用一个工厂函数来导入派生类并在那里创建它的实例,然后比挂钩到每个导入更好地解决这个问题。
-
@AlexGill:否则你可以将一个新的
__import__包装器注入到主函数全局变量中,但我认为这是最后的努力。您最好在该模块中对DerivedClassName全局进行猴子修补。
标签: python initialization derived-class base-class