En Python comment puis-je utiliser une méthode de classe, sans passer par une instance?
Donc, j'ai un module commun qui contient des fonctions de traitement pour les nombres et les types de données que j'utilise. Je veux être en mesure de l'inclure comme from common import common
(ou encore mieux,import common
) et d'utiliser des fonctions comme common.howLongAgo(unixTimeStamp)
Ce qui est nécessaire pour ce faire, dans mon module commun?. Commune est un module composé d'une classe "ordinaire".
Pourquoi ces fonctions sur une classe à la première place? Si ils n'ont pas besoin
Pour les faire sortir de mon principal fichier python
Pour ce faire, vous n'avez pas besoin de les mettre dans une classe. Il suffit de déplacer un module et de les laisser au niveau du module.
self
, pourquoi ne pas mettre à la portée de module?Pour les faire sortir de mon principal fichier python
Pour ce faire, vous n'avez pas besoin de les mettre dans une classe. Il suffit de déplacer un module et de les laisser au niveau du module.
OriginalL'auteur Supernovah | 2012-03-29
Vous devez vous connecter pour publier un commentaire.
Façons d'exposer des méthodes dans un module python:
module
foo.py
:maintenant, l'importation:
Si vous voulez faire de la méthode de classe de plus utile, de l'importation de la classe:
Vous pouvez également
import ... as ...
pour le rendre plus lisible:Ceux que vous devriez utiliser est un peu une question de goût. Ma règle personnelle de base est:
La décoration de votre les méthodes de la classe avec
@classmethod
est beaucoup plus propreC'est assez commun. La bibliothèque standard a quelques exemples. le
os
module de l'être.Je préfère utiliser
@staticmethod
je vais modifier. Afin de refléter les trois options.Je pense que
staticmethod
est rarement utile en Python. Il ne peut pas accéder à une classe, ni une instance, alors pourquoi est-ce la méthode dans une classe? Je sais qu'il existe des cas d'utilisation, mais ils sont assez exceptionnelles.OriginalL'auteur brice
si vous avez le module common.py et la fonction est dans la classe commune
alors vous devez changer votre méthode à méthode statique de pentecôte décorateur @staticmethod
De cette façon, vous n'avez pas besoin de changer toute la classe, et vous pouvez toujours utiliser l'auto.howLongAgo dans la classe
OriginalL'auteur Luka Rahne
Ci-dessus est la façon habituelle de faire classmethods en utilisant des objets Python, pas le vieux-classes de style.
Alternativement, vous pourriez dire un staticmethod:
Utilisez celui qui fait plus de sens pour vous, pour votre problème. Staticmethods doit généralement être séparés dans leur propre fonctionnalité, l'utilisation d'une classe est superflu.
Cf.
http://pyvideo.org/video/880/stop-writing-classes
test = Test()
vous êtes la création d'une instance. C'est ce que je veux éviter.OriginalL'auteur Chris Allen