Способ Pythonic организовать модули и пакеты

JTracert больше не выпускается. На месте они рекомендуют http://www.jsonde.com/

42
задан user 23 May 2012 в 01:24
поделиться

5 ответов

Думайте в терминах «логической единицы упаковки» "- который может быть одним классом, но чаще будет набором тесно взаимодействующих классов. Классы (или функции уровня модуля - не «делайте Java в Python», всегда используя статические методы, если функции уровня модуля также доступны в качестве выбора! -) могут быть сгруппированы на основе этого критерия. В принципе, если большинству пользователей A также нужен B, и наоборот, A и B, вероятно, должны быть в одном модуле; но если многим пользователям понадобится только один из них, а не другой, тогда они, вероятно, должны быть в разных модулях (возможно, в одном пакете, т. е. каталог с файлом __ init __. py в нем).

Стандартная библиотека Python, хотя и далека от совершенства, имеет тенденцию отражать (в основном) разумные передовые практики - так что вы можете извлечь из нее своим примером. Например, модуль threading , конечно, определяет класс Thread ... но он также содержит классы примитивов синхронизации, такие как блокировки, события, условия и семафоры, а также исключение - класс, который можно поднять с помощью потоковых операций (и некоторых других вещей). Он находится на верхней границе разумного размера (800 строк, включая пробелы и строки документации), и некоторые важные функции, связанные с потоками, такие как Queue, были помещены в отдельный модуль, тем не менее, это хороший пример того, какой максимальный объем функциональных возможностей все еще имеет смысл упаковать в один модуль.

каталог с файлом __ init __. py в нем).

Стандартная библиотека Python, хотя и далека от совершенства, имеет тенденцию отражать (в основном) разумные передовые практики, поэтому вы можете извлечь из нее урок на примере . Например, модуль threading , конечно, определяет класс Thread ... но он также содержит классы примитивов синхронизации, такие как блокировки, события, условия и семафоры, а также исключение - класс, который может быть поднят с помощью потоковых операций (и некоторых других вещей). Он находится на верхней границе разумного размера (800 строк, включая пробелы и строки документации), и некоторые важные функции, связанные с потоками, такие как Queue, были помещены в отдельный модуль, тем не менее, это хороший пример того, какой максимальный объем функциональных возможностей все еще имеет смысл для упаковки в один модуль.

каталог с файлом __ init __. py в нем).

Стандартная библиотека Python, хотя и далека от совершенства, имеет тенденцию отражать (в основном) разумные передовые практики, поэтому вы можете извлечь из нее урок на примере . Например, модуль threading , конечно, определяет класс Thread ... но он также содержит классы примитивов синхронизации, такие как блокировки, события, условия и семафоры, а также исключение - класс, который можно поднять с помощью потоковых операций (и некоторых других вещей). Он находится на верхней границе разумного размера (800 строк, включая пробелы и строки документации), и некоторые важные функции, связанные с потоками, такие как Queue, были помещены в отдельный модуль, тем не менее, это хороший пример того, какой максимальный объем функциональных возможностей все еще имеет смысл упаковать в один модуль.

py в нем).

Стандартная библиотека Python, хотя и далека от совершенства, имеет тенденцию отражать (в основном) разумные передовые практики, поэтому вы можете в основном учиться на примерах. Например, модуль threading , конечно, определяет класс Thread ... но он также содержит классы примитивов синхронизации, такие как блокировки, события, условия и семафоры, а также исключение - класс, который может быть поднят с помощью потоковых операций (и некоторых других вещей). Он находится на верхней границе разумного размера (800 строк, включая пробелы и строки документации), и некоторые важные функции, связанные с потоками, такие как Queue, были помещены в отдельный модуль, тем не менее, это хороший пример того, какой максимальный объем функциональных возможностей все еще имеет смысл упаковать в один модуль.

py в нем).

Стандартная библиотека Python, хотя и далека от совершенства, имеет тенденцию отражать (в основном) разумные передовые практики, поэтому вы можете в основном учиться на примерах. Например, модуль threading , конечно, определяет класс Thread ... но он также содержит классы примитивов синхронизации, такие как блокировки, события, условия и семафоры, а также исключение - класс, который может быть поднят с помощью потоковых операций (и некоторых других вещей). Он находится на верхней границе разумного размера (800 строк, включая пробелы и строки документации), и некоторые важные функции, связанные с потоками, такие как Queue, были помещены в отдельный модуль, тем не менее, это хороший пример того, какой максимальный объем функциональных возможностей все еще имеет смысл упаковать в один модуль.

хотя и далек от совершенства, он отражает (в основном) достаточно хорошие практики, поэтому вы можете извлечь из этого урок на собственном примере. Например, модуль threading , конечно, определяет класс Thread ... но он также содержит классы примитивов синхронизации, такие как блокировки, события, условия и семафоры, а также исключение - класс, который может быть поднят с помощью потоковых операций (и некоторых других вещей). Он находится на верхней границе разумного размера (800 строк, включая пробелы и строки документации), а некоторые важные функции, связанные с потоками, такие как Queue, были помещены в отдельный модуль, тем не менее, это хороший пример того, какой максимальный объем функциональных возможностей все еще имеет смысл для упаковки в один модуль.

хотя и далек от совершенства, он отражает (в основном) достаточно хорошие практики, поэтому вы можете извлечь из этого урок на собственном примере. Например, модуль threading , конечно, определяет класс Thread ... но он также содержит классы примитивов синхронизации, такие как блокировки, события, условия и семафоры, а также исключение - класс, который может быть поднят с помощью потоковых операций (и некоторых других вещей). Он находится на верхней границе разумного размера (800 строк, включая пробелы и строки документации), и некоторые важные функции, связанные с потоками, такие как Queue, были помещены в отдельный модуль, тем не менее, это хороший пример того, какой максимальный объем функциональных возможностей все еще имеет смысл упаковать в один модуль.

имеет тенденцию отражать (в основном) разумно передовой опыт, поэтому вы можете извлечь из него урок на собственном примере. Например, модуль threading , конечно, определяет класс Thread ... но он также содержит классы примитивов синхронизации, такие как блокировки, события, условия и семафоры, а также исключение - класс, который можно поднять с помощью потоковых операций (и некоторых других вещей). Он находится на верхней границе разумного размера (800 строк, включая пробелы и строки документации), и некоторые важные функции, связанные с потоками, такие как Queue, были помещены в отдельный модуль, тем не менее, это хороший пример того, какой максимальный объем функциональных возможностей все еще имеет смысл для упаковки в один модуль.

имеет тенденцию отражать (в основном) разумно передовой опыт, поэтому вы можете извлечь из него урок на собственном примере. Например, модуль threading , конечно, определяет класс Thread ... но он также содержит классы примитивов синхронизации, такие как блокировки, события, условия и семафоры, а также исключение - класс, который может быть поднят с помощью потоковых операций (и некоторых других вещей). Он находится на верхней границе разумного размера (800 строк, включая пробелы и строки документации), и некоторые важные функции, связанные с потоками, такие как Queue, были помещены в отдельный модуль, тем не менее, это хороший пример того, какой максимальный объем функциональных возможностей все еще имеет смысл для упаковки в один модуль.

но он также содержит классы примитивов синхронизации, такие как блокировки, события, условия и семафоры, а также класс исключения, который может быть вызван операциями потоковой передачи (и еще несколькими вещами). Он находится на верхней границе разумного размера (800 строк, включая пробелы и строки документации), а некоторые важные функции, связанные с потоками, такие как Queue, были помещены в отдельный модуль, тем не менее, это хороший пример того, какой максимальный объем функциональных возможностей все еще имеет смысл упаковать в один модуль.

но он также содержит классы примитивов синхронизации, такие как блокировки, события, условия и семафоры, а также класс исключения, который может быть вызван операциями потоковой передачи (и еще несколькими вещами). Он находится на верхней границе разумного размера (800 строк, включая пробелы и строки документации), а некоторые важные функции, связанные с потоками, такие как Queue, были помещены в отдельный модуль, тем не менее, это хороший пример того, какой максимальный объем функциональных возможностей все еще имеет смысл упаковать в один модуль.

33
ответ дан 26 November 2019 в 23:54
поделиться

В качестве нечеткого указания: более 1 класса на файл является нормой для python

также, см. Сколько классов Python я должен поместить в один файл?

3
ответ дан 26 November 2019 в 23:54
поделиться

Если вы хотите придерживаться своей файловой системы с одним классом ( что логично, не поймите меня неправильно), вы можете сделать что-то вроде этого, чтобы не ссылаться на car.Automobile :

from automobile import Automobile
car = Automobile()

Однако, как упомянул cobbal, более одного класса на файл довольно часто встречается в Python. В любом случае, пока вы выбираете разумную систему и используете ее последовательно, я не думаю, что кто-то из пользователей Python рассердится на вас :).

9
ответ дан 26 November 2019 в 23:54
поделиться

Если вы исходите из точки зрения C ++, вы можете просматривать модули Python, похожие на .so или .dll. Да, они выглядят как исходные файлы, потому что python написан по сценарию, но на самом деле это загружаемые библиотеки с определенной функциональностью.

Еще одна метафора, которая может помочь - вы можете рассматривать модули Python как пространства имен.

8
ответ дан 26 November 2019 в 23:54
поделиться

В проекте среднего размера я обнаружил, что использую несколько наборов тесно связанных классов. Некоторые из этих наборов теперь сгруппированы в файлы; например, все классы низкоуровневой сети находятся в едином сетевом модуле. Однако некоторые из самых крупных классов были разделены в свои собственные файлы.

Возможно, лучший способ начать движение по этому пути с истории одного класса для каждого файла - это взять классы, которые вы обычно помещаете в в том же каталоге, и вместо этого храните их в одном файле. Если этот файл начинает выглядеть слишком большим, разделите его.

4
ответ дан 26 November 2019 в 23:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: