2015-06-21 4 views
3

Мне нужно переопределить функцию __import__ в python, когда я динамически импортирую производный класс. (У меня есть только доступ к базовому классу). Например:Переопределить __import__ в python

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__ базового класса, чтобы добавить его к серверам [] список, поэтому, когда в главном модуле я называю:

__import__('DerivedClassName') 

База __init__ будет называться

+2

Зачем вам это нужно? Почему бы просто не использовать фабричную функцию, которая производит производный класс и экземпляр? –

+1

Не видите, что это связано с 'импортом'. – Daniel

+0

У меня нет доступа к производному классу или к основной функции, которая импортирует этот производный класс (только базовый) –

ответ

2

Я кончался metaclassing класс серверов:

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 

Таким образом, е в то время, когда производный класс был импортирован, мета-init получил вызов. Именно то, что я хотел. Спасибо @MartijnPieters

Смежные вопросы