Organizowanie klas Pythona w modułach i / lub pakietach
Podoba mi się konwencja Javy polegająca na posiadaniu jednej klasy publicznej na plik, nawet jeśli czasami istnieją dobre powody, aby umieścić więcej niż jedną klasę publiczną w jednym pliku. W moim przypadku mam alternatywne implementacje tego samego interfejsu. Ale jeśli umieściłbym je w osobnych plikach, miałbym zbędne nazwy w poleceniach importu (lub mylące nazwy modułów):
import someConverter.SomeConverter
Natomiast someConverter
będzie nazwą pliku (i modułu), a SomeConverter
nazwą klasy. Dla mnie to wygląda dość nieelegancko. Na umieszczenie wszystkich alternatywnych klas w jednym pliku doprowadziłoby do bardziej znaczącej instrukcji importu:
import converters.SomeConverter
Ale obawiam się, że pliki staną się dość duże, jeśli umieszczę wszystkie powiązane klasy w jednym pliku modułu. Jaka jest najlepsza praktyka w Pythonie? Czy jedna klasa na plik jest nietypowa?
2 answers
Wiele z nich to osobiste preferencje. Korzystając z modułów Pythona, masz możliwość przechowywania każdej klasy w osobnym pliku i nadal Zezwalaj na import converters.SomeConverter
(lub from converters import SomeConverter
)
Twoja struktura plików może wyglądać mniej więcej tak:
* converters
- __init__.py
- baseconverter.py
- someconverter.py
- otherconverter.py
A następnie w pliku __init__.py
:
from baseconverter import BaseConverter
from otherconverter import OtherConverter
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-28 21:18:43
Rozwiązanie Zacha łamie się w Pythonie 3. Oto stałe rozwiązanie.
Wiele z nich to osobiste preferencje. Korzystając z modułów Pythona, masz możliwość przechowywania każdej klasy w osobnym pliku i nadal Zezwalaj naimport converters.SomeConverter
(lub from converters import SomeConverter
)
Twoja struktura plików może wyglądać mniej więcej tak:
* converters
- __init__.py
- baseconverter.py
- someconverter.py
- otherconverter.py
A następnie w pliku __init__.py
:
from converters.baseconverter import BaseConverter
from converters.otherconverter import OtherConverter
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-06 21:36:11