Круговой импорт Python в атрибутах класса - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть следующие файлы:

user.py

...
from models.company import Company

class User(BaseModel):
    company = ForeignKeyField(Company, ...)
...

company.py

...
from models.user import User

class Company(BaseModel):
    user = ForeignKeyField(User, ...)
...

Это обычная ошибка циклического импорта для Pythonобеспокоен.Проблема в том, что обычные обходные пути (размещение оператора импорта в конце файла, импорт по-разному и т. Д.) Не работают в этом контексте, потому что я использую один класс в определении атрибута классадругого класса.

Как правильно решить проблему циклического импорта в этом контексте?

1 Ответ

0 голосов
/ 13 декабря 2018

Оказывается, что это на самом деле невозможно , как указал @PatrickHaugh:

Обратите внимание, что вы не можете определить оба из них в одном файле, как они естьнаписано.Когда вы выполните первое определение, оно потерпит неудачу, потому что имя другого класса еще не было определено, независимо от того, что вы определили первым.Из какого фреймворка происходит ForeignKeyField?У него могут быть инструменты для обхода этого.

Поскольку я использую peewee в качестве моего ORM, для этой заливки создано специальное поле: DeferredForeignKey.

Итак, в конце концов, решение было:

user.py

...
from models.company import Company

class User(BaseModel):
    company = ForeignKeyField(Company, ...)
...

company.py

...
class Company(BaseModel):
    user = DeferredForeignKey('User', ...)
...
...