web-dev-qa-db-fra.com

Python - Dois-je mettre mes fonctions d'assistance à l'intérieur ou à l'extérieur de la classe?

En Python, si certaines méthodes d'une classe nécessitent une fonction d'assistance, mais que la fonction d'assistance elle-même n'utilise rien dans la classe, dois-je placer la fonction d'assistance à l'intérieur ou à l'extérieur de la classe?

J'ai essayé de le mettre à l'intérieur mais PyLint se plaignait que cette fonction aurait pu être mise à l'extérieur.

@Karl:

La classe est une mise à niveau logicielle et la fonction d'assistance crée un nouveau dossier si le dossier n'existe pas encore. La classe est dans un module ayant à peu près uniquement le code de la classe à partir de maintenant. D'autres classes peuvent être ajoutées ultérieurement.

47
Jack Z

Lorsque je décide où placer les fonctions d'aide, la question que je pose est: "Est-ce uniquement pour cette classe?" Si cela peut aider à d'autres endroits, alors cela va au niveau du module; si c'est en effet uniquement pour cette classe, alors il va dans la classe avec staticmethod (n'a pas besoin de données de classe pour faire son travail) ou classmethod (utilise une classe, mais pas une instance, data pour faire son travail).

Un autre python vérificateur de code est pyflakes .

52
Ethan Furman

Il est possible que la fonction d'assistance s'intègre mieux au niveau du module plutôt qu'à la classe.

Si vous n'êtes pas d'accord que c'est le cas, il y a un staticmethod decorator que vous pouvez utiliser sur les fonctions à l'intérieur de la classe. Autrement dit, une méthode statique se comporte de la même manière entre les instanciations d'objets de la même classe. Il ne dépend pas des données d'instance.

Pour cette raison, le décorateur staticmethod rend le comportement de la fonction tel qu'il ne prend pas de premier argument implicite (généralement self) comme indiqué dans la documentation).

9
Brian