Python - Должен ли я помещать свои вспомогательные функции внутри или вне класса?
В Python, если некоторым методам класса нужна вспомогательная функция, но сама вспомогательная функция ничего не использует в классе, я должен помещать вспомогательную функцию внутри или вне класса?
Я попытался поместить его внутрь, но PyLint жаловался, что эту функцию можно было бы поставить вне.
@Karl:
Класс - это программа обновления программного обеспечения, а вспомогательная функция создает новую папку, если папка еще не существует. Класс находится в модуле, имеющем на данный момент только код для класса. Другие классы могут быть добавлены позже.
Ответы
Ответ 1
Когда вы решаете, где поставить вспомогательные функции, я задаю вопрос: "Это только для этого класса?" Если он может помочь в других местах, то он идет на уровне модуля; если он действительно только для этого класса, то он входит в класс с помощью staticmethod
(для выполнения задания не требуется данных класса) или classmethod
(использует некоторые данные класса, но не экземпляра, чтобы выполнять свою работу).
Еще одна проверка кода на python pyflakes.
Ответ 2
Возможно, что вспомогательная функция лучше подходит для уровня модуля, а не для класса.
Если вы не согласны с тем, что это так, существует staticmethod decorator, который можно использовать для функций внутри класса. Проще говоря, статический метод ведет себя так же между экземплярами объектов одного и того же класса. Он не полагается на данные экземпляра.
По этой причине декоратор staticmethod
отображает поведение функции таким образом, что он не принимает неявный первый аргумент (обычно self
), как указано в документации).