Je trouve que j'ai le plus souvent utiliser @classmethod
pour associer un morceau de code avec une classe, afin d'éviter de créer une fonction globale, pour les cas où je n'ai pas besoin d'une instance de la classe à utiliser le code.
Par exemple, je pourrais avoir une structure de données qui ne considère qu'un clé valide que si elle est conforme à un modèle. Je souhaiterez peut-être utiliser ce de l'intérieur et à l'extérieur de la classe. Cependant, je ne veux pas créer encore une autre fonction globale:
def foo_key_is_valid(key):
# code for determining validity here
return valid
Je préfère de loin le groupe le présent code avec la classe il est associé à:
class Foo(object):
@classmethod
def is_valid(cls, key):
# code for determining validity here
return valid
def add_key(self, key, val):
if not Foo.is_valid(key):
raise ValueError()
..
# lets me reuse that method without an instance, and signals that
# the code is closely-associated with the Foo class
Foo.is_valid('my key')