Statique des classes en Python
J'ai lu une fois (je pense que sur une page à partir de Microsoft) que c'est une bonne façon d'utiliser les classes statiques, lorsque vous n'avez pas BESOIN de deux ou plusieurs instances d'une classe.
Je suis en train d'écrire un programme en Python. Est-ce un mauvais style, si j'utilise @classmethod
pour chaque méthode d'une classe?
Vous devez vous connecter pour publier un commentaire.
Dans mon expérience, la création d'une classe est une très bonne solution pour un certain nombre de raisons. L'une est que vous vous retrouvez à l'aide de la classe "normal" de la classe (esp. faire plus que juste un exemple) plus souvent que vous ne le pensez. Il est également raisonnable de choix de style de bâton avec des classes pour tout, ce qui peut rendre plus facile pour les autres qui lisent/maintenir votre code, esp s'ils sont très OO - ils vont être à l'aise avec les classes. Comme indiqué dans d'autres réponses, il est également raisonnable de l'utiliser juste 'nue' fonctions pour la mise en œuvre. Vous pourriez peut-être commencer avec une classe et d'en faire un singleton/Borg modèle (beaucoup d'exemples si vous googlefor ces); il vous donne la flexibilité de se (ré)utiliser la classe pour répondre à d'autres besoins. Je recommanderais contre la "classe statique" comme étant non-conventionnelles et non-Pythonic, ce qui rend plus difficile à lire et à maintenir.
Généralement, l'utilisation de ce genre est mieux fait simplement à l'aide de fonctions dans un module, sans classe à tous.
namedtuple
ou quelque chose à transmettre autour de. Stocker des choses dans une classe juste pour éviter de les passer autour de est généralement une mauvaise idée de toute façon - il pourrait en résulter des problèmes.C'est terrible de style, sauf si vous avez réellement besoin d'accéder à la classe.
source
Il existe quelques approches que vous pourriez prendre pour cela. Comme d'autres l'ont mentionné, vous pouvez simplement utiliser module-fonctions de niveau. Dans ce cas, le module lui-même est l'espace de noms qui les tient ensemble. Une autre option qui peut être utile si vous avez besoin de garder une trace de l'état, est de définir une classe avec des méthodes normales (en prenant soi-même), puis définir une seule instance globale, et de copier ses méthodes d'instance du module de l'espace de noms. C'est l'approche adoptée par la bibliothèque standard "aléatoire" module-jetez un oeil à
lib/python2.5/random.py
dans votre répertoire python. Au fond, il a quelque chose comme ceci:Ou vous pouvez prendre l'approche de base que vous avez décrit (même si je vous conseille d'utiliser
@staticmethod
plutôt que@classmethod
dans la plupart des cas).Vous pourriez voulez vraiment une classe singleton plutôt que d'une classe statique:
Faire une classe singleton en python