2010-08-25 3 views
9

Итак, у меня есть класс в модуле, который имеет некоторые статические методы. Пара этих статических методов просто выполняет проверки crc и прочее, и они не очень полезны вне класса (я бы просто сделал их частными статическими методами в Java или C++). Мне интересно, следует ли мне вместо этого делать им глобальные функции класса (вне класса).Статический метод vs функция модуля в python

Есть ли какая-либо польза для этого в любом случае? Класс импортируется from module import class, поэтому я не беспокоюсь о том, что эти модули тоже втянуты. Но должен ли я просто сделать их классными методами, чтобы from module import * был безопаснее или что-то еще?

ответ

7

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

Другой метод, чтобы указать __all__ список в модуле - это может только быть сделано в самом модуле (не нужен __init__.py файл)

__all__ = ['my_class_name'] 

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

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

+0

Я не знал о '__all__'. Спасибо =] – Falmarri

3

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

3

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

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

Смежные вопросы