Как обрабатывать сообщение Pylint: Предупреждение: метод может быть функцией - PullRequest
54 голосов
/ 20 апреля 2010

У меня есть класс Python, и я запустил Pylint против него. Одно сообщение, которое он дал, было:

Warning: Method could be a function

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

В C # я бы сделал это статическим методом. Что здесь самое питонское?

1 Ответ

58 голосов
/ 20 апреля 2010

Перемещение в функцию является обычным делом, если оно вообще не касается класса.

Если он манипулирует атрибутами класса, используйте декоратор classmethod:

@classmethod
def spam(cls, ...):
   # cls is the class, you can use it to get class attributes

classmethod и staticmethod (что совпадает с первым, за исключением того, что метод не получает ссылку на класс из своего первого параметра) были введены совсем недавно. Это означает, что некоторые программисты на Python используются, чтобы избегать статических и классовых методов.

Некоторые хардкорные программисты на Python скажут вам, что эти декораторы просто усложняют ситуацию; некоторые другие люди (обычно бывшие программисты на C # или Java) скажут вам, что использование функции недостаточно объектно-ориентировано. Я думаю, что это просто вопрос предпочтений.

...