Maison > Article > développement back-end > python soi, qu'est-ce que cela signifie
Self signifie "soi". En Python, il représente une instance d'une classe, pas une classe. Self ne peut être trouvé que dans les méthodes de classe. Il n'est pas nécessaire que les fonctions ou méthodes indépendantes aient self ; Le nom de soi n'est pas nécessaire. Vous pouvez le définir comme a ou b ou tout autre nom, mais il est conventionnel et peut réduire la difficulté de compréhension.
Tout d'abord, nous devons comprendre pourquoi le mot self est utilisé dans les classes Python. Pourquoi ne pas utiliser des noms comme "zhangsan" et "lisi". cela doit avoir son intention.
self représente une instance d'une classe, pas une classe.
class Test: def prt(self): print(self) print(self.__class__) t = Test() t.prt()
Le résultat de l'exécution est le suivant :
<__main__.Test object at 0x000000000284E080> <class '__main__.Test'>
D'après l'exemple ci-dessus, il est évident que self représente une instance d'une classe. Et self.class pointe vers la classe.
Le premier paramètre de la méthode dans la classe doit être self, sinon l'instance ne peut pas appeler correctement la méthode dans la classe, c'est-à-dire si le premier paramètre de la méthode n'est pas self (au sens large). sens), alors cette méthode n'a aucune valeur car l'instance ne peut pas l'appeler. Je ne sais vraiment pas à quoi sert une méthode qui ne peut pas être appelée.
Remarque : Remplacez self par ceci, le résultat sera le même, mais il est préférable d'utiliser le self conventionnel en Python.
Lors de l'héritage, l'instance transmise est l'instance transmise, et non l'instance de la classe dans laquelle self est défini.
class Parent: def pprt(self): print(self) class Child(Parent): def cprt(self): print(self) c = Child() c.cprt() c.pprt() p = Parent() p.pprt()
Les résultats d'exécution sont les suivants :
<__main__.Child object at 0x0000000002A47080> <__main__.Child object at 0x0000000002A47080> <__main__.Parent object at 0x0000000002A47240>
Explication :
Il ne devrait y avoir aucun problème de compréhension lors de l'exécution de c.cprt(), qui fait référence à un instance de la classe Child.
Mais lors de l'exécution de c.pprt(), c'est équivalent à Child.pprt(c), donc self fait toujours référence à une instance de la classe Child Puisque la méthode pprt() n'est pas définie dans self, l'héritage est hérité En regardant dans l'arborescence, j'ai découvert que la méthode pprt() est définie dans la classe parent Parent, elle sera donc appelée avec succès
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!