web-dev-qa-db-fra.com

Comment gérer le message pylint: Avertissement: la méthode peut être une fonction

J'ai une classe python et j'ai exécuté pylint contre elle. Un message qu'il a donné était:

Warning: Method could be a function

Est-ce que cela me dit qu'il serait préférable de déplacer cette méthode hors de la classe car elle n'utilise aucune variable d'instance?

En C #, j'en ferais une méthode statique. Quelle est la chose la plus pythonique à faire ici?

56
bignum

Le déplacer vers une fonction est courant, s'il ne touche pas du tout la classe.

S'il manipule des attributs de classe, utilisez le décorateur classmethod:

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

classmethod et staticmethod (qui est la même que la première, sauf que la méthode n'obtient pas de référence à la classe à partir de son premier paramètre) ont été introduites assez récemment. Cela signifie que certains programmeurs Python sont utilisés pour éviter les méthodes statiques et de classe.

Certains hardcore Python vous diront que ces décorateurs compliquent les choses; d'autres personnes (généralement d'anciens programmeurs C # ou Java programmeurs) vous diront que l'utilisation d'une fonction n'est pas assez orienté objet. Je pense que c'est juste une question de préférence.

58
Bastien Léonard