Я пишу проект Python с SQLAlchemy, и у меня есть 2 класса - базовый класс и дочерний класс.Дочерний класс наследуется от базового класса и используется в качестве полиморфного идентификатора для поля типа базового класса.
Файл 1:
class Animal(Base):
__tablename__ = "animals"
animal_id = Column(String, primary_key=True)
animal_type = Column(String)
family = Column(String)
@staticmethod
def init(animal_id):
return Sessions.main.query(Animal).filter_by(animal_id=animal_id).first()
__mapper_args__ = {
"polymorphic_on": animal_type,
"polymorphic_identity": "animals"
}
Файл 2:
from animal.animal import Animal
class Lion(Animal):
__mapper_args__ = {
"polymorphic_identity" = "lion"
}
Два класса помещены в разные файлы, но когда я запускаю экземпляр животного (который фактически должен быть инициирован как экземпляр льва), он вызывает исключение с No such polymorphic identity
, хотя оно существует, но в другом файле.
lion = Animal.init('lionid1')
AssertionError: No such polymorphic identity 'lion' is defined
Когда я перемещаю класс Lion
в тот же файл, где находится класс Animal
, инициализация проходит успешно, но это не то решение, которое мне нужно, потому что оба этих класса в конечном итоге будут слишком большимидля одного файла.
Я также не могу импортировать класс Lion
в файл базового класса, поскольку дочерний класс наследует от базового класса, а затем оба они импортируют друг друга, что также вызывает ошибку:
from lion.lion import Lion # added on the top of file 1
ImportError: cannot import name 'Lion'
Есть идеи как ее решить?Как я могу расположить эти два класса в разных файлах, не вызывая ни одной из этих ошибок?