在 python 中覆盖 __import__
Override __import__ in python
当我动态导入派生的 class 时,我需要覆盖 python 中的 __import__ 函数。 (我只能访问基本 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)
导入派生的 class 时,我需要调用基础 class 的 __init__ 以将其添加到 Servers[] 列表中,因此在主模块中我调用:
__import__('DerivedClassName')
基地__init__将被调用
我最终对服务器进行了元classing class:
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
这样,每次导入派生的 class 时都会调用 meta-init。
正是我想要的。
谢谢@MartijnPieters
当我动态导入派生的 class 时,我需要覆盖 python 中的 __import__ 函数。 (我只能访问基本 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)
导入派生的 class 时,我需要调用基础 class 的 __init__ 以将其添加到 Servers[] 列表中,因此在主模块中我调用:
__import__('DerivedClassName')
基地__init__将被调用
我最终对服务器进行了元classing class:
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
这样,每次导入派生的 class 时都会调用 meta-init。 正是我想要的。 谢谢@MartijnPieters