Я изучаю Python, и я играл вокруг с пакетами. Я хотел знать лучший способ определить классы в пакетах. Кажется, что единственный способ определить классы в пакете состоит в том, чтобы определить их в __init__.py
из того пакета. Происходя из Java, я отчасти хотел бы определить отдельные файлы для своих классов. Действительно ли это - методические рекомендации?
Я хотел бы иметь свой каталог, несколько походят на это:
recursor/
__init__.py
RecursionException.py
RecursionResult.py
Recursor.py
Таким образом, я мог обратиться к своим классам как recursor.Recursor
, recursor.RecursionException
, и recursor.RecursionResult
. Это выполнимо или рекомендовано в Python?
Идите вперед и определите свои классы в отдельных модулях. Затем заставьте __ init __. Py
сделать что-то вроде этого:
from RecursionException import RecursionException
from RecursionResult import RecursionResult
from Recursor import Recursor
Это импортирует каждый класс в корневое пространство имен пакета, поэтому вызывающий код может ссылаться на recursor.Recursor
вместо recursor.Recursor.Recursor
.
Я чувствую необходимость повторить здесь некоторые другие комментарии: Python - это не Java. Вместо того, чтобы создавать новый модуль для каждого класса под солнцем, я предлагаю сгруппировать тесно связанные классы в один модуль. Так легче понять ваш код, и для вызывающего кода не потребуется миллиард операций импорта.
Это вполне выполнимо. Просто создайте новый модуль класса для каждого из этих классов и создайте именно ту структуру, которую вы указали.
Вы также можете создать модуль Recursion.py или что-то подобное, и включить все 3 класса в этот файл.
(Я тоже новичок в Python с Java, и я еще ничего не включил в свои __init__.py
файлы...)
В Python вы не ограничены определением 1 класса в файле, и мало кто так делает. Однако вы можете, если хотите - это полностью зависит от вас. Пакет в Python - это просто каталог с
__init__.py
файлом. Вам не обязательно помещать что-либо в этот файл, вы можете контролировать, что импортируется и т.д.