Lassen Sie uns über private Eigenschaften und private Methoden von Python sprechen

WBOY
Freigeben: 2023-04-12 11:37:08
nach vorne
1441 Leute haben es durchsucht

Lassen Sie uns über private Eigenschaften und private Methoden von Python sprechen

1. Szenariodefinition

Private Eigenschaften

bedeutet, dass im objektorientierten Entwicklungsprozess von Python einige Eigenschaften des Objekts nur innerhalb des Objekts verwendet werden sollen, aber nicht von außen darauf zugegriffen werden soll.

Das heißt: Private Attribute sind Attribute, die das Objekt nicht öffentlich machen möchte.

Private Methoden

bedeutet, dass im objektorientierten Entwicklungsprozess von Python einige Methoden oder Funktionen des Objekts nur innerhalb des Objekts verwendet werden sollen, aber nicht von außen darauf zugegriffen werden soll.

Das heißt: Private Methoden sind Methoden oder Funktionen, die das Objekt nicht öffentlich machen möchte.

2. Syntaxdefinition

Die Syntax zum Definieren privater Eigenschaften und privater Methoden in Python lautet wie folgt:

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))
Nach dem Login kopieren

(1) ist eine private Eigenschaft, die mit zwei Unterstrichen beginnt.

(2). __secret(self) ist eine private Methode, die mit zwei Unterstrichen beginnt.

3. Aufrufanalyse

(1). In der Objektinitialisierungsmethode von __init__ ist das __salary-Attribut, das mit zwei Unterstrichen beginnt, ein privates Attribut.

Rufen Sie nun das __salary-Attribut außerhalb des Objekts auf, um zu sehen, ob auf das private Attribut normal zugegriffen werden kann.

Lassen Sie uns über private Eigenschaften und private Methoden von Python sprechen

Wie aus den laufenden Ergebnissen in der obigen Abbildung, Zeile 11, ersichtlich ist, wird beim Zugriff auf das private Attribut __salary des Objekts von außerhalb des Objekts ein AttributeError-Fehler angezeigt. Das Staff-Objekt zhangsan hat keine Attribut __Gehalt.

Um zu beweisen, dass das Staff-Klassenobjekt tatsächlich das Instanzattribut __salary hat, nur weil auf die privaten Attribute außerhalb des Objekts nicht zugegriffen werden kann.

Ich habe self.__salary geändert in: self.__salary, die Methode __secret(self) verweist auf das Attribut self.__salary und habe entsprechende Änderungen vorgenommen, wie in der Abbildung unten gezeigt.

Lassen Sie uns über private Eigenschaften und private Methoden von Python sprechen

Aus den laufenden Ergebnissen ist ersichtlich, dass der externe Aufruf dieses nicht privaten Attributs normal ist und kein AttributeError-Fehler angezeigt wird.

(2). In der __secret(self)-Instanzmethode ist die __secret(self)-Methode, die mit zwei Unterstrichen beginnt, eine private Methode.

Wie beim obigen Testprozess rufen Sie zunächst die private Methode __secret(self) außerhalb des Objekts auf, um zu prüfen, ob die private Methode normal aufgerufen werden kann.

Lassen Sie uns über private Eigenschaften und private Methoden von Python sprechen

Wie aus den Ausführungsergebnissen in der obigen Abbildung, Zeile 11, ersichtlich ist, wird beim Zugriff auf die private Methode __secret(self) des Objekts außerhalb des Objekts ein AttributeError-Fehler angezeigt. Das Staff-Objekt zhangsan hat keine __secret-Methode.

Um zu beweisen, dass das Staff-Klassenobjekt die Instanzmethode __secret(self) hat, nur weil auf die private Methode außerhalb des Objekts nicht zugegriffen werden kann.

Ich habe die Methode __secret(self) geändert in: Secret(self), und andere Codes bleiben unverändert. Sehen Sie sich die laufenden Ergebnisse an, wie in der Abbildung unten gezeigt.

Lassen Sie uns über private Eigenschaften und private Methoden von Python sprechen

Aus den laufenden Ergebnissen ist ersichtlich, dass der externe Aufruf dieser nicht privaten Methode normal ist und kein AttributeError-Fehler angezeigt wird.

(3) Wie Sie der Abbildung unten entnehmen können, können private Methoden und private Eigenschaften innerhalb des Objekts aufgerufen werden.

Wie in der Abbildung gezeigt, ruft die Arbeitsmethode die private Methode __secret(self) auf, und die private Methode __secret(self) ruft das private Attribut __salary auf.

Lassen Sie uns über private Eigenschaften und private Methoden von Python sprechen

Verwenden Sie das Staff-Klassenobjekt zhangsan außerhalb des Objekts, um die Arbeitsmethode aufzurufen, die indirekt auf die privaten Eigenschaften und privaten Methoden des Objekts zugreifen kann.

Aus der Konsolenausgabe ist ersichtlich, dass die Arbeitsmethode normalerweise auf die im Objekt definierten privaten Eigenschaften und privaten Methoden zugreifen kann.

4. Pseudoprivate Attribute und private Methoden von Python

In Python gibt es kein wirkliches Gefühl der Privatsphäre, da Python bei der Benennung von Attributen und Methoden intern eine spezielle Verarbeitung der Namen durchführt, wodurch die entsprechenden Namen für die Außenwelt unzugänglich werden . Eigenschaften und Methoden.

Am Beispiel privater Attribute und privater Methoden lautet die interne Verarbeitungsmethode von Python:

(1). Der verarbeitete Attributname lautet: _Staff__salary (_Klassenname__Attributname)

(2) . Der Name der verarbeiteten Methode lautet: _Staff__secret(_class name__method name)

Ich kenne Pythons interne Verarbeitung privater Attribute und privater Methoden. Verwenden Sie jetzt diese verarbeitete Benennungsmethode, um Objekte zu benennen. Greifen Sie extern auf private Eigenschaften und private Methoden zu, um zu sehen, ob normal auf sie zugegriffen werden kann .

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())
Nach dem Login kopieren

Die Laufergebnisse sind im Bild unten zu sehen

Lassen Sie uns über private Eigenschaften und private Methoden von Python sprechen

Die Konsole hat keine Ausnahme ausgelöst und die vorherige AttributeError-Fehlermeldung ist verschwunden.

Dieses Beispiel beweist, dass Python nicht im eigentlichen Sinne privat ist. Sie können dennoch die Methode _class name__ Attributname (Methodenname) verwenden, um von außerhalb des Objekts auf die interne Definition zuzugreifen Eigenschaften und private Methoden.

Aber diese Methode wird in der täglichen Arbeit nicht empfohlen, da Eigenschaften und Methoden beim Definieren innerhalb des Objekts als privat deklariert werden und der Aufrufer sich an die Regeln halten muss.

Ich möchte dieses kleine Beispiel nur nutzen, um zu veranschaulichen, dass Python nicht im eigentlichen Sinne privat ist.

Das obige ist der detaillierte Inhalt vonLassen Sie uns über private Eigenschaften und private Methoden von Python sprechen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:51cto.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage