JTracert больше не выпускается. На месте они рекомендуют http://www.jsonde.com/
Думайте в терминах «логической единицы упаковки» "- который может быть одним классом, но чаще будет набором тесно взаимодействующих классов. Классы (или функции уровня модуля - не «делайте 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, были помещены в отдельный модуль, тем не менее, это хороший пример того, какой максимальный объем функциональных возможностей все еще имеет смысл упаковать в один модуль.
Стандартная библиотека Python, хотя и далека от совершенства, имеет тенденцию отражать (в основном) разумные передовые практики, поэтому вы можете в основном учиться на примерах. Например, модуль threading
, конечно, определяет класс Thread
... но он также содержит классы примитивов синхронизации, такие как блокировки, события, условия и семафоры, а также исключение - класс, который может быть поднят с помощью потоковых операций (и некоторых других вещей). Он находится на верхней границе разумного размера (800 строк, включая пробелы и строки документации), и некоторые важные функции, связанные с потоками, такие как Queue, были помещены в отдельный модуль, тем не менее, это хороший пример того, какой максимальный объем функциональных возможностей все еще имеет смысл упаковать в один модуль.
Стандартная библиотека 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, были помещены в отдельный модуль, тем не менее, это хороший пример того, какой максимальный объем функциональных возможностей все еще имеет смысл упаковать в один модуль. В качестве нечеткого указания: более 1 класса на файл является нормой для python
также, см. Сколько классов Python я должен поместить в один файл?
Если вы хотите придерживаться своей файловой системы с одним классом ( что логично, не поймите меня неправильно), вы можете сделать что-то вроде этого, чтобы не ссылаться на car.Automobile
:
from automobile import Automobile
car = Automobile()
Однако, как упомянул cobbal, более одного класса на файл довольно часто встречается в Python. В любом случае, пока вы выбираете разумную систему и используете ее последовательно, я не думаю, что кто-то из пользователей Python рассердится на вас :).
Если вы исходите из точки зрения C ++, вы можете просматривать модули Python, похожие на .so или .dll. Да, они выглядят как исходные файлы, потому что python написан по сценарию, но на самом деле это загружаемые библиотеки с определенной функциональностью.
Еще одна метафора, которая может помочь - вы можете рассматривать модули Python как пространства имен.
В проекте среднего размера я обнаружил, что использую несколько наборов тесно связанных классов. Некоторые из этих наборов теперь сгруппированы в файлы; например, все классы низкоуровневой сети находятся в едином сетевом
модуле. Однако некоторые из самых крупных классов были разделены в свои собственные файлы.
Возможно, лучший способ начать движение по этому пути с истории одного класса для каждого файла - это взять классы, которые вы обычно помещаете в в том же каталоге, и вместо этого храните их в одном файле. Если этот файл начинает выглядеть слишком большим, разделите его.