Maison  >  Article  >  développement back-end  >  Parlons des propriétés privées et des méthodes privées de Python

Parlons des propriétés privées et des méthodes privées de Python

WBOY
WBOYavant
2023-04-12 11:37:081442parcourir

Parlons des propriétés privées et des méthodes privées de Python

1. Définition du scénario

Propriétés privées

signifie que dans le processus de développement orienté objet de Python, certaines propriétés de l'objet veulent uniquement être utilisées à l'intérieur de l'objet, mais ne veulent pas être accessibles de l'extérieur.

C'est-à-dire : les attributs privés sont des attributs que l'objet n'est pas disposé à rendre publics.

Méthodes privées

signifie que dans le processus de développement orienté objet de Python, certaines méthodes ou fonctions de l'objet veulent uniquement être utilisées à l'intérieur de l'objet, mais ne veulent pas être accessibles de l'extérieur.

C'est-à-dire : les méthodes privées sont des méthodes ou des fonctions que l'objet ne veut pas rendre publiques.

2. Définition de la syntaxe

La syntaxe pour définir les propriétés privées et les méthodes privées en Python est la suivante :

class Staff:
def __init__(self, s_name, s_salary):
self.s_name = s_name
self.__salary = s_salary

def __secret(self):
print("%s 的工资是 %d" % (self.s_name, self.__salary))

(1) est une propriété privée définie en commençant par deux traits de soulignement.

(2). __secret(self) est une méthode privée définie en commençant par deux traits de soulignement.

3. Analyse des appels

(1). Dans la méthode d'initialisation d'objet de __init__, l'attribut __salary défini en commençant par deux traits de soulignement est un attribut privé.

Appelez maintenant l'attribut __salary en dehors de l'objet pour voir si l'attribut privé est accessible normalement.

Parlons des propriétés privées et des méthodes privées de Python

Comme le montrent les résultats d'exécution de la figure ci-dessus, ligne 11, c'est-à-dire que lors de l'accès à l'attribut privé __salary de l'objet depuis l'extérieur de l'objet, une erreur AttributeError est générée. L'objet Staff zhangsan n'en a pas. attribut __salaire.

Pour prouver que l'objet de classe Staff a l'attribut d'instance __salary, simplement parce que les attributs privés ne sont pas accessibles en dehors de l'objet.

J'ai modifié self.__salary en : self.salary, la méthode __secret(self) fait référence à l'attribut self.__salary et j'ai apporté les modifications correspondantes comme indiqué dans la figure ci-dessous.

Parlons des propriétés privées et des méthodes privées de Python

Il ressort des résultats en cours d'exécution que l'appel externe de cet attribut non privé est normal et qu'aucune erreur AttributeError n'est générée.

(2). Dans la méthode d'instance __secret(self), la méthode __secret(self) définie en commençant par deux traits de soulignement est une méthode privée.

Identique au processus de test ci-dessus, appelez d'abord la méthode privée __secret(self) en dehors de l'objet pour voir si la méthode privée peut être appelée normalement.

Parlons des propriétés privées et des méthodes privées de Python

Comme le montrent les résultats d'exécution de la figure ci-dessus, ligne 11, c'est-à-dire que lors de l'accès à la méthode privée __secret(self) de l'objet en dehors de l'objet, une erreur AttributeError est générée pour l'objet Staff zhangsan. n'a pas de méthode __secret.

Pour prouver que l'objet de classe Staff a la méthode d'instance __secret(self), simplement parce que la méthode privée n'est pas accessible en dehors de l'objet.

J'ai modifié la méthode __secret(self) pour : secret(self) et les autres codes restent inchangés. Voir les résultats en cours d'exécution comme indiqué dans la figure ci-dessous.

Parlons des propriétés privées et des méthodes privées de Python

Il ressort des résultats en cours d'exécution que l'appel externe de cette méthode non privée est normal et qu'aucune erreur AttributeError n'est générée.

(3). Comme vous pouvez le voir sur la figure ci-dessous, les méthodes privées et les propriétés privées peuvent être appelées à l'intérieur de l'objet.

Comme le montre la figure, la méthode de travail appelle la méthode privée __secret(self) et la méthode privée __secret(self) appelle l'attribut privé __salary.

Parlons des propriétés privées et des méthodes privées de Python

Utilisez l'objet de classe Staff zhangsan en dehors de l'objet pour appeler la méthode de travail, qui peut accéder indirectement aux propriétés privées et aux méthodes privées de l'objet.

D'après la sortie de la console, on peut voir que la méthode de travail peut normalement accéder aux propriétés privées et aux méthodes privées définies à l'intérieur de l'objet.

4. Attributs pseudo-privés et méthodes privées de Python

En Python, il n'y a pas de véritable sentiment de confidentialité, car Python effectue en interne un traitement spécial sur les noms lors de la nomination des attributs et des méthodes, rendant les noms correspondants inaccessibles au monde extérieur. . propriétés et méthodes.

En prenant comme exemple les attributs privés et les méthodes privées, la méthode de traitement interne de Python est :

(1) Attribut : __salary, le nom de l'attribut traité est : _Staff__salary (_class name__attribute name)

(2) Méthode : __secret, le nom de la méthode traitée est : _Staff__secret(_class name__method name)

Je connais le traitement interne par Python des attributs privés et des méthodes privées, et j'utilise maintenant cette méthode de dénomination traitée pour nommer des objets Accéder en externe aux propriétés privées et aux méthodes privées pour voir si elles sont accessibles normalement.

class Staff:
def __init__(self, s_name, s_salary):
self.s_name = s_name
self.__salary = s_salary

def __secret(self):
return "%s的工资是 %d" % (self.s_name, self.__salary)
zhangsan = Staff("张三", 10000)
print(zhangsan._Staff__salary)
print(zhangsan._Staff__secret())

Les résultats en cours d'exécution sont présentés dans l'image ci-dessous

Parlons des propriétés privées et des méthodes privées de Python

La console n'a généré aucune exception et le message d'erreur AttributeError précédent a disparu.

Cet exemple prouve que Python n'est pas privé au vrai sens du terme. Après avoir connu sa méthode de traitement interne, vous pouvez toujours utiliser la méthode de nom d'attribut _class name__ (nom de méthode) pour accéder à la définition interne de l'objet depuis l'extérieur de l'objet privé. propriétés et méthodes privées.

Mais cette méthode n'est pas recommandée dans le travail quotidien. Car lorsque les propriétés et les méthodes sont définies à l'intérieur de l'objet, elles sont déclarées privées et l'appelant doit respecter ses règles.

Je veux juste utiliser ce petit exemple pour illustrer que Python n'a pas de réel sentiment de confidentialité.

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