Объект как интерфейс

У меня есть объект, который реализует интерфейс, и затем я нахожу этот объект, используя отражение. Но я должен просто сделать их методами класса, чтобы из модуля импорта * был безопаснее или что-то еще?

9
задан David Hall 25 August 2010 в 22:57
поделиться

3 ответа

Префикс имен функций с одним символом подчеркивания является соглашением, чтобы сказать, что они являются частными, и это также предотвратит их импорт с помощью from module import *.

Еще один способ — указать в модуле список __all__ — это можно сделать в самом модуле (вам не нужен файл __init__.py)

__all__ = ['my_class_name']

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

Поэтому, если ваши методы логически не относятся к классу, а согласно вашему описанию они не принадлежат, я бы оставил их как функции уровня модуля и использовал один из этих двух подходов, чтобы сделать их закрытыми.

7
ответ дан 4 December 2019 в 15:10
поделиться

Если они бесполезны вне класса, зачем делать их модульными методами? Сохранение их как статического метода делает пространство имен более чистым.

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

3
ответ дан 4 December 2019 в 15:10
поделиться

Сделайте их функциями уровня модуля и добавьте к ним префикс с одним символом подчеркивания, чтобы потребители понимали, что они предназначены для личного использования.

3
ответ дан 4 December 2019 в 15:10
поделиться
Другие вопросы по тегам:

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