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