Méthode de classe Python ()

La méthode classmethod () renvoie une méthode de classe pour la fonction donnée.

La syntaxe de la classmethod()méthode est:

 méthode de classe (fonction)

classmethod()est considéré comme non pythonique, donc dans les nouvelles versions de Python, vous pouvez utiliser le @classmethoddécorateur pour la définition de méthode de classe.

La syntaxe est:

 @classmethod def func (cls, args…)

Paramètres classmethod ()

classmethod() La méthode prend un seul paramètre:

  • function - Fonction qui doit être convertie en méthode de classe

Valeur renvoyée par classmethod ()

classmethod() La méthode renvoie une méthode de classe pour la fonction donnée.

Qu'est-ce qu'une méthode de classe?

Une méthode de classe est une méthode liée à une classe plutôt qu'à son objet. Cela ne nécessite pas la création d'une instance de classe, tout comme la méthode statique.

La différence entre une méthode statique et une méthode de classe est:

  • La méthode statique ne sait rien de la classe et ne traite que des paramètres
  • La méthode de classe fonctionne avec la classe puisque son paramètre est toujours la classe elle-même.

La méthode de classe peut être appelée à la fois par la classe et son objet.

 Class.classmethod () Ou même Class (). Classmethod ()

Mais quoi qu'il arrive, la méthode de classe est toujours attachée à une classe avec le premier argument comme la classe elle-même cls.

 def classMethod (cls, args…)

Exemple 1: Créer une méthode de classe en utilisant classmethod ()

 class Person: age = 25 def printAge(cls): print('The age is:', cls.age) # create printAge class method Person.printAge = classmethod(Person.printAge) Person.printAge()

Production

 L'âge est: 25 ans 

Ici, nous avons une classe Person, avec une variable membre d'âge assignée à 25.

Nous avons également une fonction printAgequi prend un seul paramètre cls et non que selfnous prenons habituellement.

cls accepte la classe Personcomme paramètre plutôt que l'objet / l'instance de Person.

Maintenant, nous passons la méthode Person.printAgecomme argument à la fonction classmethod. Cela convertit la méthode en méthode de classe afin qu'elle accepte le premier paramètre en tant que classe (c'est-à-dire Person).

Dans la dernière ligne, nous appelons printAgesans créer d'objet Person comme nous le faisons pour les méthodes statiques. Cela imprime l'âge de la variable de classe.

Quand utilisez-vous la méthode de classe?

1. Méthodes d'usine

Les méthodes d'usine sont ces méthodes qui renvoient un objet de classe (comme un constructeur) pour différents cas d'utilisation.

C'est similaire à la surcharge de fonctions en C ++. Depuis, Python n'a rien en tant que tel, des méthodes de classe et des méthodes statiques sont utilisées.

Exemple 2: Créer une méthode d'usine à l'aide de la méthode de classe

 from datetime import date # random Person class Person: def __init__(self, name, age): self.name = name self.age = age @classmethod def fromBirthYear(cls, name, birthYear): return cls(name, date.today().year - birthYear) def display(self): print(self.name + "'s age is: " + str(self.age)) person = Person('Adam', 19) person.display() person1 = Person.fromBirthYear('John', 1985) person1.display()

Production

 L'âge d'Adam est: 19 L'âge de Jean est: 31 

Ici, nous avons deux créateur d'instance de classe, un constructeur et une fromBirthYearméthode.

Le constructeur prend le nom et l'âge des paramètres normaux. Tandis que, fromBirthYearprend class, name et birthYear, calcule l'âge actuel en le soustrayant avec l'année en cours et renvoie l'instance de classe.

La méthode fromBirthYear prend la classe Person (pas l'objet Person) comme premier paramètre cls et renvoie le constructeur en appelant cls(name, date.today().year - birthYear), ce qui équivaut àPerson(name, date.today().year - birthYear)

Avant la méthode, on voit @classmethod. C'est ce qu'on appelle un décorateur pour la conversion fromBirthYearen une méthode de classe comme classmethod().

2. Création de l'instance correcte dans l'héritage

Chaque fois que vous dérivez une classe de l'implémentation d'une méthode de fabrique en tant que méthode de classe, cela garantit la création d'instance correcte de la classe dérivée.

Vous pouvez créer une méthode statique pour l'exemple ci-dessus, mais l'objet qu'il crée sera toujours codé en dur en tant que classe de base.

Mais, lorsque vous utilisez une méthode de classe, elle crée l'instance correcte de la classe dérivée.

Exemple 3: Comment fonctionne la méthode de classe pour l'héritage?

 from datetime import date # random Person class Person: def __init__(self, name, age): self.name = name self.age = age @staticmethod def fromFathersAge(name, fatherAge, fatherPersonAgeDiff): return Person(name, date.today().year - fatherAge + fatherPersonAgeDiff) @classmethod def fromBirthYear(cls, name, birthYear): return cls(name, date.today().year - birthYear) def display(self): print(self.name + "'s age is: " + str(self.age)) class Man(Person): sex = 'Male' man = Man.fromBirthYear('John', 1985) print(isinstance(man, Man)) man1 = Man.fromFathersAge('John', 1965, 20) print(isinstance(man1, Man))

Production

 Vrai faux 

Ici, l'utilisation d'une méthode statique pour créer une instance de classe veut que nous codions en dur le type d'instance lors de la création.

Cela pose clairement un problème lors de l'héritage Personde Man.

fromFathersAgeLa méthode ne renvoie pas un Manobjet mais celui de sa classe de base Person.

Cela viole le paradigme de la POO. L'utilisation d'une méthode de classe fromBirthYearpeut garantir la POO du code car elle prend le premier paramètre comme classe elle-même et appelle sa méthode de fabrique.

Articles intéressants...