[PYTHON] Diverses méthodes de classe et méthodes statiques

introduction

Dans cet article, j'écrirai sur ce qu'est une "méthode de classe". Articles jusqu'à la dernière fois ↓ ↓ ↓ Ceci et celui des propriétés python

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

En un mot, c'est une «méthode qui peut être utilisée directement à partir d'une classe, comme une variable de classe». (Une méthode est une fonction dans une classe)

@classmethod
nom de la méthode def(cls,Argument 1,Argument 2, ...): 

C'est la forme d'une méthode de classe. Je pense que c'est facile à dire car il y a certaines parties qui sont différentes des fonctions que nous avons vues jusqu'à présent. (1) Puisque l'instance (entité) n'existe pas, le «soi» qui se représente n'est pas préparé. (2) Un argument appelé 'cls' est préparé à la place de 'soi' et l'objet de la classe dans laquelle la méthode de classe est stockée est affecté.

Lors de l'appel d'une méthode de classe, il est possible de l'appeler directement depuis la classe.

#Appel d'une méthode de classe
nom de la classe.Nom de la méthode de classe()

#Pour les méthodes normales
hello =nom de la classe#Création d'instance
hello.Nom de la méthode#Appel de méthode

Soyez prudent lorsque vous l'utilisez, car la partie appelante est également différente.

Variable de classe

J'ai mentionné la méthode de classe plus tôt comme "une méthode qui peut être utilisée directement à partir de la classe comme une variable de classe". Mais si vous ne savez pas quelles sont les variables de classe en premier lieu, je pense que c'est une chose rafraîchissante. La variable de classe est la partie "message" du code ci-dessous.

class Lesson:
    message = 'OK'

    def print(self):
        print(Lesson.message)

le = Lesson()            #Création d'instance
le.print()               #appel de méthode d'impression
Lesson.message = 'Welcome!'    #'message'Le contenu de la variable'Welcome!'changer en
le.print()                     #encore'méthode d'impression'appel
print(Lesson.message)          #Appelez également le message de variable de classe

Je ne pense pas que ce soit si difficile parce que c'est comme une variable normale.

Comme vous pouvez le voir à la toute fin, vous pouvez l'appeler directement depuis la classe sans créer d'instance. En effet, contrairement aux méthodes (celles avec def), les valeurs sont stockées dans la classe elle-même, pas dans l'instance.

Une méthode de classe est une combinaison de variables de classe et de méthodes. Il peut être appelé directement depuis la classe et peut être facilement modifié.

Exemple d'utilisation de la méthode de classe

class MyObj:
  message = 'OK'
  
  @classmethod
  def print(cls):
    print(cls.message)
    
MyObj.print()   #OK
MyObj.message = 'Welcome!'
MyObj.print()   #Welcome!
print(MyObj.message)  #Welcome!

#Pour les méthodes normales
#mo = MyObj()
#mo.print()

Vous pouvez voir que vous pouvez l'appeler directement depuis la classe sans créer d'instance. Vous pouvez voir qu'elle est différente de la méthode normale car vous pouvez facilement modifier la valeur.

Créer une instance

Maintenant, préparons une méthode normale et une méthode de classe et vérifions comment elles se comportent lorsqu'une instance est créée.

class A():
  count = 0
  def __init__(self):
    A.count += 1      #Chaque fois qu'une instance est créée'count'Est ajouté
  def exclaim(self):
    print('I am an A!')
  @classmethod
  def kids(cls):
    print('A has', cls.count, 'title objects.')   #Montre combien de fois il a été compté
    
a = A()   #Créer une instance
b = A()   #Créer une instance
c = A()   #Créer une instance
A.kids()  #Appel d'une méthode de classe'A has 3 title objects.'

Il s'agit d'un "compte" ajouté chaque fois qu'une instance est créée.

Après avoir créé une instance trois fois avec "a", "b" et "c", la méthode de classe est appelée pour afficher le nombre de fois qu'elle a été comptée. Puisque l'instance a été créée 3 fois, vous pouvez voir que «compte» est ajouté par «3». Lorsque vous appelez la méthode de classe, elle n'est pas ajoutée car l'instance n'est pas créée.

Quelle est la différence entre une méthode de classe et une méthode ou une fonction?

Je voudrais résumer ici les différences entre eux.

#Méthode de classe
@classmethod
nom de la méthode def(cls,Argument 1,Argument 2, ...): 
#Méthode
nom de la méthode def(self,Argument 1,Argument 2, ...): 
#une fonction
nom de la fonction def():

Vous pouvez voir la différence en les organisant de cette manière. ① Différence entre la méthode de classe et la méthode -> Les méthodes ne peuvent pas être appelées sans créer une instance, mais les méthodes de classe peuvent être appelées directement depuis la classe.

② Différence entre la méthode de classe et la fonction -> Vous pouvez obtenir la classe elle-même appelée "cls" comme premier argument. Une autre différence est qu'il se trouve dans une classe, vous pouvez donc l'utiliser en important la classe.

Méthode statique

De là, nous expliquerons les méthodes statiques. La méthode statique est une méthode de classe, mais la différence est que vous n'avez pas besoin de spécifier d'argument. Voyons-le réellement.

@staticmethod
nom de la méthode def():
     print("C'est une méthode statique.")

#appel
nom de la classe.Nom de la méthode()

Quand c'était une méthode de classe, il y avait quelque chose appelé "cls" dans le premier argument, mais ce n'est pas dans la méthode statique. C'est facile à comprendre si vous pensez que c'est presque la même chose que la méthode. Elle n'est pas souvent utilisée, mais elle se caractérise par la possibilité d'être appelée directement depuis la classe comme la méthode de classe.

À la fin

Dans cet article, j'ai parlé des «méthodes de classe» et des «méthodes statiques». Les articles seront mis à jour à l'avenir. Articles jusqu'à la dernière fois ↓ ↓ ↓ Ceci et celui des propriétés python

Recommended Posts

Diverses méthodes de classe et méthodes statiques
Classes et méthodes statiques
Exemple d'utilisation de variables de classe et de méthodes de classe
[Python] Différence entre la méthode de classe et la méthode statique
Méthode de classe Méthode statique
À propos de la classe et de l'instance
[python] méthode de base de la classe
Python: variables de classe et d'instance
Différentes façons d'importer Mnist
Variables de classe et d'instance Python
Héritage de classe et super fonction
J'hériterai et remplacerai la classe
Combinaison de problèmes typiques d'optimisation et comment le faire
Utilisation correcte de la méthode d'instance et de la méthode de classe
objet perl et classe python partie 2.
Définitions de classe Python et gestion des instances
Calcul de la classe auto-fabriquée et de la classe existante
(Pour moi) Flask_ex (modèles et statique)
objet perl et classe python partie 1.
Classes et instances Python, méthodes d'instance