Возникло непонимание поведения питона.
Я проектирую систему для парсинга логов Exim с поддержкой плагинов.
За основу был взят пример из книги “Pro Python System Administration”.
В чем, собственно, проблема:
есть код менеджера плагинов в файле manager.py
# -*- coding: utf-8 -*-
import sys
import os
class Plugin(object):
pass
class PluginManager():
def __init__(self, path=None, plugin_init_args={}):
if path:
self.plugin_dir = path
else:
self.plugin_dir = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'plugins')
self.plugins = {}
self._load_plugins()
self._register_plugins(**plugin_init_args)
def _load_plugins(self):
sys.path.append(self.plugin_dir)
plugin_files = [fn for fn in os.listdir(self.plugin_dir) if fn.startswith('plugin_') and fn.endswith('.py')]
plugin_modules = [m.split('.')[0] for m in plugin_files]
for module in plugin_modules:
m = __import__(module)
def _register_plugins(self, **kwargs):
for plugin in Plugin.__subclasses__():
obj = plugin(**kwargs)
plugin_manager = PluginManager()
первый
# -*- coding: utf-8 -*-
from manager import Plugin
class TestPlugin(Plugin):
def __init__(self):
print 'Test plugin'
# -*- coding: utf-8 -*-
from manager import Plugin
class OtherTestPlugin(Plugin):
def __init__(self):
print 'Other Test plugin'
при импортировании модуля manager.py код отрабатывает нормально,
а при запуске инициализируется только первый плагин.
Подскажите в чем может быть причина такого поведения.
Спасибо.