У меня есть объект, который реализует интерфейс, и затем я нахожу этот объект, используя отражение. Но я должен просто сделать их методами класса, чтобы из модуля импорта *
был безопаснее или что-то еще?
Префикс имен функций с одним символом подчеркивания является соглашением, чтобы сказать, что они являются частными, и это также предотвратит их импорт с помощью from module import *
.
Еще один способ — указать в модуле список __all__
— это можно сделать в самом модуле (вам не нужен файл __init__.py
)
__all__ = ['my_class_name']
Это скорее подход с использованием белого списка, поэтому вы можете полностью контролировать то, что импортируется, без использования начальных символов подчеркивания.
Поэтому, если ваши методы логически не относятся к классу, а согласно вашему описанию они не принадлежат, я бы оставил их как функции уровня модуля и использовал один из этих двух подходов, чтобы сделать их закрытыми.
Если они бесполезны вне класса, зачем делать их модульными методами? Сохранение их как статического метода делает пространство имен более чистым.
Единственное преимущество в том, чтобы вынести его за пределы, может быть, чтобы люди могли ссылаться на них, не используя для них уточненное имя класса. Скажем, у вас есть метод журнала, на который ссылаются во множестве мест, это может иметь смысл как стилистический выбор.
Сделайте их функциями уровня модуля и добавьте к ним префикс с одним символом подчеркивания, чтобы потребители понимали, что они предназначены для личного использования.