在python中重写导入
动态导入派生类时,我需要重写python中的_import _函数。(我只能访问基类代码)。例如:在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__._
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修补。