Недавно я столкнулся с реализацией фабрики классов 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']
subclasses / 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')
<b>ImportError: cannot import name</b> BaseClass
Я также пытался использовать "import BaseClass", а затемподкласс «BaseClass.BaseClass», но это привело к другой ошибке:
1 import BaseClass
----> 2 class SubClassA(BaseClass.BaseClass):
3 def __init__(self):
4 print('Instantiating SubClassA')
<b>AttributeError: 'module' object has no attribute 'BaseClass'</b>
Наконец, если я просто попытаюсь создать каталог подкласса, проблем не будет.Только когда я пытаюсь импортировать модуль BaseClass, что-то идет не так.
Есть идеи?