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?

Author: deamon, 2010-10-01

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
 55
Author: Zach,
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 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 converters.baseconverter import BaseConverter
from converters.otherconverter import OtherConverter
 39
Author: Spundun,
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