Mam pojedynczy moduł Pythona który zawiera 3 klasy: A, A1 i A2. A1 i A2 pochodzą z A. A zawiera funkcje działające na A1 i A2.

To wszystko działa dobrze, gdy jest w jednym pliku .py. Ale ten plik wzrósł dość długo i chciałbym podzielić A1 i A2 na własne pliki. Jak mogę podzielić ten plik pomimo okrągłej zależności?

17
Adam 18 październik 2011, 00:38

3 odpowiedzi

Najlepsza odpowiedź

Moda.py:

class A(...):
   ...

Moda1.py:

import modA
class A1(modA.A):
   ...

Moda2.py:

import modA
class A2(modA.A):
   ...

Moderll:

from modA import A
from modA1 import A1
from modA2 import A2

Nawet jeśli "procesy" A1S i A2S powinieneś być w porządku, ponieważ dzięki Duck wpisując, nie musisz importować rzeczywistych nazw.

12
spam_eggs 17 październik 2011, 20:50

Jak mogę podzielić ten plik z pomimo okrągłej zależności?

Opcja 1: Przerwa cykle: Umieść klasę bazową we własnym module, klasy pochodne w dodatkowych modułach i funkcje działające na tych zajęciach pochodnych w kolejnym module.


Opcja 2: Ignoruj cykle, importuj tylko moduły / pakiety do globalnej przestrzeni nazw, tj.:

Foo.py.

class Bar:
    "Frobs Quuxen"

Nigdy nie powinien być importowany jako from foo import Bar, wystarczy użyć import foo i patrz w funkcje foo.Bar w razie potrzeby.

2
Community 20 czerwiec 2020, 09:12

Myślę, że rdzeń twojego pytania jest to, że nie chcesz

a.py to imports a1
if
a1.py imports a.

Jednak to całkowicie w Pythonie. Jednak upewnij się, że nie masz żadnego kodu poza funkcjami / klasami w systemie z wieloma modułami, ponieważ kolejność, która działa, będzie się różnić w zależności od tego, gdzie zaimportujesz, co ten import, faza księżyca itd.

0
Nick ODell 17 październik 2011, 20:47