Maison  >  Article  >  développement back-end  >  Introduction aux membres intégrés courants en Python orienté objet

Introduction aux membres intégrés courants en Python orienté objet

WBOY
WBOYavant
2023-04-12 09:10:081820parcourir

D'accord, aujourd'hui, nous continuons à analyser les classes en Python.

[[441842]]

Lorsque nous avons défini la classe précédemment, nous avons utilisé le constructeur. Le constructeur en Python est assez spécial. C'est une fonction spéciale __init__ En fait, dans la classe, sauf le constructeur. a également de nombreuses autres fonctions au format __XXX__, et il existe également des attributs __xx__. Parlons-en un par un :

Constructeur

Introduction aux membres intégrés courants en Python orienté objet

Le constructeur de toutes les classes en Python est __init__ Selon nos besoins, le constructeur est divisé en constructeur paramétré et constructeur sans paramètre. Si aucun constructeur n'est défini actuellement, le système générera automatiquement un constructeur vide et sans paramètre. Par exemple :

Introduction aux membres intégrés courants en Python orienté objet

Dans une classe avec une relation d'héritage, tant que la classe parent est explicitement définie, la classe enfant appellera le constructeur de la classe parent pour créer l'objet de classe parent lors de sa création, même si le La classe enfant n'hérite pas de la classe parent. Les propriétés héritées seront également automatiquement implémentées. Par exemple :

Introduction aux membres intégrés courants en Python orienté objet

Si la sous-classe souhaite hériter et obtenir les attributs de la classe parent, elle doit appeler explicitement le constructeur de la classe parent pour les obtenir, sinon elle ne peut obtenir que les méthodes de la classe parent. Par exemple :

Introduction aux membres intégrés courants en Python orienté objet

Ici, nous devons introduire un nouveau concept, à savoir la surcharge de fonctions. Au sein d'une classe, s'il existe plusieurs fonctions avec le même nom et des paramètres de fonction différents (nombres, types et ordres différents), alors nous appelons ces fonctions des fonctions surchargées et la valeur de retour de la fonction n'est pas utilisée comme base pour la surcharge. Nous avons des concepts similaires en Java et C++. Cependant, Python est un langage de programmation dynamique et ses données n'ont pas de types de données. Par conséquent, nous ne pouvons pas surcharger les fonctions à l'intérieur de la classe. Par conséquent, nous ne pouvons pas avoir plusieurs méthodes portant le même nom dans la classe, donc notre méthode constructeur ne le fait pas non plus. écrivez-le, ou nous ne pouvons en écrire qu'un. Si vous ne l'écrivez pas, le système générera automatiquement un constructeur vide sans paramètre ; si vous l'écrivez, vous ne pourrez appeler que ce constructeur. De plus, lorsque nous étudiions les décorateurs, il nous semblait avoir écrit plusieurs méthodes du même nom à l'intérieur de la classe, par exemple :

Introduction aux membres intégrés courants en Python orienté objet

Alors ces méthodes du même nom sont-elles une relation de surcharge Non, car elles ? ne sont pas des méthodes complètes. Elles doivent ajouter des restrictions @property, @name.setter et @name.deleter pour être complètes, il ne s'agit donc pas d'une surcharge de fonctions.

Destructeur

Le constructeur est automatiquement exécuté lors de la création de l'objet et sa principale responsabilité est d'initialiser l'objet. Le destructeur est automatiquement exécuté lorsque l'objet est détruit (del est exécuté ou recyclé), et sa principale responsabilité est de recycler l'objet. Si nous n’avons pas écrit de méthode de destructeur auparavant, le système générera automatiquement un destructeur vide. Ensuite, nous écrirons un destructeur. La méthode destructrice en Python s'appelle __del__. Par exemple :

Introduction aux membres intégrés courants en Python orienté objet

Nous l'appelons ainsi :

Introduction aux membres intégrés courants en Python orienté objet

est exécuté comme

Introduction aux membres intégrés courants en Python orienté objet

Ici, nous voulons nous concentrer sur le mécanisme de récupération de place de Python.

Actuellement, les programmeurs ne prêtent pas une attention particulière au mécanisme de récupération de place du système, car le matériel se développe très rapidement et les ressources dont nous disposons sont très riches. La mémoire du serveur 4G est petite et la plupart d'entre elles peuvent démarrer. avec 8G, ce qui ne suffit pas pour en rajouter. Mais pour certains emplois haut de gamme et industries de haute précision, le mécanisme de collecte des déchets reste très important. Voyons donc ici le mécanisme de récupération de place en python.

Le mécanisme de garbage collection en Python est principalement basé sur le comptage de références. Le système attribue un compteur de référence à chaque objet pour enregistrer le nombre de fois que l'objet actuel est utilisé. Puisqu’il s’agit de compter, il existe des opérations d’addition et de soustraction. Le système stipule que le compteur est incrémenté de 1 lorsque les conditions suivantes sont remplies :

1. Créer un nouvel objet

2 Référencer un objet

3. Passer l'objet en paramètre réel.

Diminuez le compteur de 1 lorsque les conditions suivantes sont remplies :

1 Effectuez l'opération del sur l'objet

.

2. La référence de l'objet se voit attribuer une nouvelle valeur

3. L'objet quitte la portée actuelle (le plus courant est de quitter la portée de la fonction)

En python, on obtient l'objet via sys.getrefcount (nom de l'objet ) Le compteur de référence actuel. Notez que le nombre de références ici n'est pas nécessairement 1 pour la première fois car il existe des références temporaires par le système. Ce n'est que lorsque le compteur de référence pointant vers l'objet devient 0 (la valeur initiale pour la première fois) que l'objet sera réellement détruit et que le destructeur de l'objet sera exécuté. Par exemple :

Introduction aux membres intégrés courants en Python orienté objet

Le résultat est

Introduction aux membres intégrés courants en Python orienté objet

Notez que la valeur de retour de 4 lorsque sys.getrefcount(ad) est appelé pour la première fois signifie que le système actuel a d'autres utilisations temporaires, nous il suffit d'atteindre 4 à la fin. Après l'explication, il revient à l'état initial. Enfin, en cas de retard, la référence temporaire au système sera également libérée. Notre environnement d'exploitation actuel est win+pycharm. Changeons à nouveau le code :

Introduction aux membres intégrés courants en Python orienté objet

La sortie est

Introduction aux membres intégrés courants en Python orienté objet

Comme le montre la sortie ci-dessus, le système semble avoir d'autres opérations sur le type de données de base, ce qui fait que son nombre de références initial est plus grand que ce à quoi nous nous attendions. Les données de type de données de référence correspondent exactement à ce à quoi nous nous attendions.

Seulement lorsque l'objet est finalement libéré (lorsque le nombre de références est de 0), la méthode destructeur __del__ sera exécutée.

__str__ méthode

Premier coup d'œil à notre code :

Introduction aux membres intégrés courants en Python orienté objet

La sortie est

Introduction aux membres intégrés courants en Python orienté objet

Lorsque nous imprimons l'objet, nous obtenons l'adresse mémoire de l'objet. Peut-il être imprimé comme les données de base. type ? Que diriez-vous d'imprimer notre type de données de référence de la même manière que les données ? Par exemple, la classe Student ci-dessus doit imprimer ses variables d'instance.

La méthode __str__ que nous avons mentionnée maintenant consiste à compléter cette fonction. La méthode __str__ a une valeur de retour. Cette valeur de retour est la valeur de sortie lorsque nous exécutons print, nous pouvons donc la formater dans la méthode __str__. Par exemple :

Introduction aux membres intégrés courants en Python orienté objet

La sortie est

Introduction aux membres intégrés courants en Python orienté objet

Comme le montre la sortie ci-dessus, lorsque nous voulons générer des données de type de données de référence formatées, nous devons remplacer la méthode __str__ dans cette classe. méthode, vous pouvez définir le contenu de sortie du contenu actuel. Cette méthode __str__ est une méthode de la classe objet, car toutes les classes en Python sont directement ou indirectement dérivées de l'objet, donc chaque type de données de référence a une méthode __str__. Il suffit de remplacer cette méthode pour remplacer la méthode de la classe parent. Sinon, le système appellera la méthode __str__ dans l'objet par défaut.

__dict__

Certaines personnes ont peut-être demandé : comment puis-je savoir quels sont les membres intégrés (propriétés et méthodes) de ma classe ? Par exemple, je ne connais même pas la méthode __str_ ci-dessus. classe python Il y a en effet une propriété qui peut imprimer tout le contenu intégré de cette classe. C'est __dict__. Notez que __dict__ est un attribut et non une méthode. N'ajoutez pas () lors de l'appel. Parce que stu1 est un objet, ce qui est significatif, ce sont les attributs, car les méthodes sont partagées par tous les objets. Les données sont uniques en elles-mêmes. Lors de l'exécution, il vous suffit de transporter l'adresse de l'objet actuel pour exécuter la méthode de la classe (c'est-à-dire self). Student est une classe, et une classe est composée d'attributs et de méthodes, donc la sortie de Student.__dict__ est légèrement plus grande, y compris les méthodes et les attributs.

Si vous voulez savoir quels membres intégrés possède la classe parent de cette classe, imprimez simplement l'attribut __dict__ de la classe parent. Par exemple, jetons un coup d'œil aux membres intégrés de l'objet classe parent de la classe Student, comme suit :

Introduction aux membres intégrés courants en Python orienté objet

Ojbect.__dict__ La sortie est un peu plus longue, imprimez-la vous-même et voyez, il doit y avoir être une description de __str__ dedans.

D'accord, aujourd'hui nous sommes entrés en contact avec le constructeur __init__, le destructeur __del__, la fonction intégrée __str__, l'attribut __dict__, etc. Demain, nous continuerons à analyser d'autres membres intégrés en orienté objet.

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer