Mam projektu Django skonstruowany tak:import wewnątrz opakowania nie zawsze pracują
appname/
models/
__init__.py
a.py
base.py
c.py
... gdzie appname/models/__ init__.py zawiera jedynie oświadczenia tak:
from appname.models.base import Base
from appname.models.a import A
from appname.models.c import C
... i gdzie appname/models/base.py zawiera:
import django.db.models
class Base(django.db.models.Model):
...
i gdzie appname/models/a.py zawiera:
import appname.models as models
class A(models.Base):
....
... i podobnie dla appname/models/c.py, etc ..
Jestem bardzo zadowolony z tej struktury mojego kodu, ale oczywiście to nie działa, ponieważ z okólnikiem import.
Po uruchomieniu appname/__ init__.py zostanie uruchomiony program appname/models/a.py, ale moduł ten zaimportuje "appname.models", które jeszcze nie zostało zakończone. Klasyczny cykliczny import.
Podejrzewam, że mój kod jest źle zbudowany i wymaga przeprojektowania w celu uniknięcia zależności cyklicznej.
Jakie są opcje, aby to zrobić?
Niektóre rozwiązania można myślę i dlaczego nie chcą z nich korzystać:
- połączyć wszystkie moje kod modelu w jednym pliku: Mając 20 + zajęcia w tym samym pliku jest znacznie gorzej styl niż to, co próbuję zrobić (z oddzielnymi plikami), moim zdaniem.
- Przenieś klasę modelu "Base" do innej paczki poza "appname/models": Oznacza to, że otrzymam pakiet w moim projekcie zawierający klasy podstawowe/nadrzędne, które najlepiej powinny zostać podzielone na pakiety, w których dziecko/podklasy są zlokalizowane. Dlaczego mam mieć klasy bazowe/nadrzędne dla modeli, formularzy, widoków itp. W tym samym pakiecie, a nie w ich własnych pakietach (gdzie dziecko/klasy podrzędne byłyby zlokalizowane), poza unikaniem importu okrężnego?
Moje pytanie dotyczy nie tylko tego, w jaki sposób należy unikać importu okrężnego, ale również w taki sposób, który jest tak samo czysty (jeśli nie czystszy), co próbowałem wdrożyć.
Czy ktoś ma lepszy sposób?
pytania „styl kodowania” są nie na temat: unikać takiego farszu na tytuły (i pytania), ale raczej po prostu przedstawić obiektywne problemu/zagadnienia. – user2864740
Moje pytanie jest związane ze stylem, jak to jest poza tematem? – pleasedesktop
Nie mówi, że twoje pytanie jest nie na temat. Zmienił swój tytuł tak, aby nie wydawał się nie na temat dla osób, które nie czytają uważnie. :-) –