Les méthodes de classe Python sont principalement divisées en trois types : les méthodes d'instance, les méthodes de classe et les méthodes statiques.
Méthode 1 instance
Une méthode avec self comme premier paramètre est une méthode d’instance de la classe. Cette méthode est appelée par une instance de la classe et Python transmet l'objet instance appelant la méthode à self.
Le code suivant définit une classe nommée A.
class A:
def __init__(self):
self.i = 0
def i_f(self):
self.i += 1
Parmi eux, i_f() est une méthode d'instance de classe A et i est une variable d'instance de classe A.
a1 = A()
a1.i_f()
a2 = A()
Dans le code ci-dessus, les objets a1 et a2 de classe A sont définis et i_f() est appelé via a1. À ce stade, la valeur du paramètre self de la méthode i_f() est a1 et la valeur de a1.i devient 1, et a2 La valeur de .i est toujours 0, comme le montre la figure 1.
Figure 1 La relation entre a1 et a2
Méthodes de classe 2
Les méthodes de classe affecteront la classe entière et toute modification apportée à la classe affectera tous ses objets d'instance. Les méthodes de classe sont généralement modifiées avec le préfixe @classmethod. Semblable aux méthodes d'instance, le premier paramètre d'une méthode de classe est la classe elle-même. Ce paramètre est généralement écrit sous la forme cls. Le code est le suivant.
class A:
i = 0
def __init__(self):
A.i += 1
@classmethod
def show_i(cls):
print(cls.i)
Parmi eux, i est la variable de classe de A. Chaque fois qu'un objet instance de A est généré, la variable de classe i sera incrémentée de 1. show_i() est modifié par @classmethod, c'est donc une méthode de classe de A. Cette méthode peut imprimer le nombre de fois que la classe A est instanciée.
a1 = A()
a2 = A()
a3 = A()
A.show_i()
Dans le code ci-dessus, comme A est instancié trois fois, le résultat imprimé est 3.
3 méthodes statiques
Les méthodes statiques sont décorées avec @staticmethod, qui n'affectera ni la classe ni les objets de la classe. Le code est comme suit
class A:
def __init__(self):
self.i = 0
@staticmethod
def set_i():
i = 1
Parmi elles, la méthode set_i() de classe A est une méthode statique. On peut voir que la méthode statique n'a ni paramètre self ni paramètre cls.
a1 = A()
A.set_i()
À l’heure actuelle, bien que la méthode set_i() soit appelée, la valeur de a1.i est toujours 0.
Il convient de noter que les méthodes statiques peuvent également être modifiées sans @staticmethod.