Недавно я наткнулся на реализацию фабрики классов Python, которая соответствует задаче, над которой я очень хорошо работаю. Единственная разница в том, что я хотел иметь базовые классы и подклассы в разных пакетах.
Однако когда я пытаюсь это сделать, я сталкиваюсь с проблемой всякий раз, когда пытаюсь загрузить базовый класс.
Состав:
BaseClass.py
from subclasses import *
def NewClass():
"""Map Factory"""
for cls in BaseClass.__subclasses__():
print "checking class..."
class BaseClass(object):
def __init__(self):
print("Building an abstract BaseMap class..")
подклассы / __ init__.py
__all__=['SubClass']
подклассы / SubClass.py
from BaseClass import BaseClass
class SubClassA(BaseClass):
def __init__(self):
print('Instantiating SubClassA')
Когда я пытаюсь импортировать BaseClass, я получаю следующую ошибку:
1 #import BaseClass ----> 2 from BaseClass import BaseClass 3 class SubClassA(BaseClass): 4 def __init__(self): 5 print('Instantiating SubClassA') ImportError: cannot import name BaseClass
Я также пробовал использовать «import BaseClass», а затем создать подкласс «BaseClass.BaseClass», но это привело к другой ошибке:
1 import BaseClass ----> 2 class SubClassA(BaseClass.BaseClass): 3 def __init__(self): 4 print('Instantiating SubClassA') AttributeError: 'module' object has no attribute 'BaseClass'
Наконец, если я просто попытаюсь создать каталог подкласса, проблем не будет. Только когда я пытаюсь импортировать модуль BaseClass, все идет не так.
Любые идеи?
from subclasses import *
, который может быть кодом, но также может быть частью вопроса. - person S.Lott   schedule 16.04.2011