Определите классы в пакетах

Я изучаю Python, и я играл вокруг с пакетами. Я хотел знать лучший способ определить классы в пакетах. Кажется, что единственный способ определить классы в пакете состоит в том, чтобы определить их в __init__.py из того пакета. Происходя из Java, я отчасти хотел бы определить отдельные файлы для своих классов. Действительно ли это - методические рекомендации?

Я хотел бы иметь свой каталог, несколько походят на это:

recursor/
    __init__.py
    RecursionException.py
    RecursionResult.py
    Recursor.py

Таким образом, я мог обратиться к своим классам как recursor.Recursor, recursor.RecursionException, и recursor.RecursionResult. Это выполнимо или рекомендовано в Python?

11
задан martineau 8 February 2018 в 15:57
поделиться

3 ответа

Идите вперед и определите свои классы в отдельных модулях. Затем заставьте __ init __. Py сделать что-то вроде этого:

from RecursionException import RecursionException
from RecursionResult import RecursionResult
from Recursor import Recursor

Это импортирует каждый класс в корневое пространство имен пакета, поэтому вызывающий код может ссылаться на recursor.Recursor вместо recursor.Recursor.Recursor .

Я чувствую необходимость повторить здесь некоторые другие комментарии: Python - это не Java. Вместо того, чтобы создавать новый модуль для каждого класса под солнцем, я предлагаю сгруппировать тесно связанные классы в один модуль. Так легче понять ваш код, и для вызывающего кода не потребуется миллиард операций импорта.

9
ответ дан 3 December 2019 в 09:18
поделиться

Это вполне выполнимо. Просто создайте новый модуль класса для каждого из этих классов и создайте именно ту структуру, которую вы указали.

Вы также можете создать модуль Recursion.py или что-то подобное, и включить все 3 класса в этот файл.

(Я тоже новичок в Python с Java, и я еще ничего не включил в свои __init__.py файлы...)

2
ответ дан 3 December 2019 в 09:18
поделиться

В Python вы не ограничены определением 1 класса в файле, и мало кто так делает. Однако вы можете, если хотите - это полностью зависит от вас. Пакет в Python - это просто каталог с

__init__.py 

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

1
ответ дан 3 December 2019 в 09:18
поделиться
Другие вопросы по тегам:

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