在python中重写导入

在python中重写导入,python,initialization,derived-class,base-class,Python,Initialization,Derived Class,Base Class,动态导入派生类时,我需要重写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__._

动态导入派生类时,我需要重写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)
导入派生类时,我需要调用基类的_uinit_uuuu将其添加到Servers[]列表中,因此在主模块中调用:

__import__('DerivedClassName')

Base uuu init uuu将被调用

我最终对Servers类进行了元分类:

Servers=[]

''' Servers Metaclass that handles addition of servers to the list '''
class MetaServer(type):
    def __init__(self, name, bases, attrs):
        self.name = name.capitalize()
        Servers.append(self)
        super(MetaServer, self).__init__(name, bases, attrs)

class ServerBase:
    __metaclass__ = MetaServer
    name='' #name of the specific server class, for each server class

    def __init__(self):
        self.connected = False
这样,每次导入派生类时,都会调用meta init。 正是我想要的。
谢谢@MartijnPieters

你为什么需要这个?为什么不使用一个生成派生类和实例的工厂函数呢?不知道这与
import
有什么关系。我无权访问派生类或导入该派生类的主函数(只有基函数)@ AlexGill:一个工厂函数,你调用它来导入派生类并在其中创建一个实例,然后解决这个问题,而不是钩住每一个导入。@ AlexGill:你可以在主函数全局函数中注入一个新的<>代码>您最好在该模块中对
DerivedClassName
global进行monkey修补。