Private Variablen in Python
- Was ist eine private Variable in Python?
- Wie implementiert man eine private Variable in Python?
- Zugriff auf private Variablen in Python
- Fazit zu privaten Python-Variablen
Private Variablen werden in Programmen zur Zugriffskontrolle verwendet. Programmiersprachen wie Java und C++ haben Schlüsselwörter angegeben, um eine private Variable zu definieren.
In Python haben wir kein Schlüsselwort, um private Variablen zu definieren. In diesem Artikel wird erläutert, wie private Variablen implementiert und unter Verwendung des Namens einer Klasse auf sie zugegriffen wird.
Was ist eine private Variable in Python?
Wir können in Python keine private Variable erstellen, aber wir können die Implementierung privater Variablen mit speziellen Namenskonventionen simulieren.
Wir können auf jedes Attribut eines Objekts zugreifen, indem wir die Syntax objectName.attributeName
verwenden. Schau dir das Beispiel an.
class Person:
def __init__(self, name, age, SSN):
self.name = name
self.age = age
self.SSN = SSN
person1 = Person(name="Alex", age=15, SSN=1234567890)
print("Name of the person is:", person1.name)
print("Age of the person is:", person1.age)
print("SSN of the person is:", person1.SSN)
Ausgabe:
Name of the person is: Alex
Age of the person is: 15
SSN of the person is: 1234567890
Wir haben eine Klasse Person
mit den Attributen name
, age
und SSN
erstellt. Nachdem wir eine Instanz person1
der Klasse Person
erstellt hatten, haben wir auf die Attribute name
, age
und SSN
ausserhalb der Klasse mit der Syntax person1.name
, person1.age
und person1.SSN
.
Wir wollen nicht, dass auf die SSN
ausserhalb der Klassendefinition zugegriffen wird. Wir haben keine Schlüsselwörter, um eine private Variable in Python zu erstellen. Wie sollen wir also die Implementierung einer privaten Variablen simulieren?
Wie implementiert man eine private Variable in Python?
Um eine private Variable in Python zu implementieren, verwenden wir einen doppelten Unterstrich (__)
vor dem Variablennamen. Lassen Sie uns das Attribut SSN
der Klasse Person
mit doppeltem Unterstrich definieren.
class Person:
def __init__(self, name, age, SSN):
self.name = name
self.age = age
self.__SSN = SSN
Wenn wir eine Instanz person1
der Klasse Person
erstellen und auf das Attribut __SSN
mit der Syntax person1.__SSN
zugreifen, zeigt das Programm einen Fehler und löst die Ausnahme AttributeError
unten aus.
class Person:
def __init__(self, name, age, SSN):
self.name = name
self.age = age
self.__SSN = SSN
person1 = Person(name="Alex", age=15, SSN=1234567890)
print("Name of the person is:", person1.name)
print("Age of the person is:", person1.age)
print("SSN of the person is:", person1.__SSN)
Ausgabe:
Name of the person is: Alex
Age of the person is: 15
/usr/lib/Python3/dist-packages/requests/__init__.py:89: RequestsDependencyWarning: urllib3 (1.26.7) or chardet (3.0.4) doesn't match a supported version!
warnings.warn("urllib3 ({}) or chardet ({}) doesn't match a supported "
Traceback (most recent call last):
File "/home/aditya1117/PycharmProjects/PythonProject/string1.py", line 11, in <module>
print("SSN of the person is:", person1.__SSN)
AttributeError: 'Person' object has no attribute '__SSN'
Wir können auf alle anderen Attribute außer __SSN
zugreifen. Das Programm sagt, dass es kein Attribut namens __SSN
gibt. Wie können wir dann auf den Wert im Attribut __SSN
zugreifen?
Zugriff auf private Variablen in Python
Wir können außerhalb der Klassendefinition nicht auf eine private Variable zugreifen, aber wir können darauf innerhalb zugreifen. Wir können also eine Methode innerhalb der Klasse erstellen, um auf den privaten Variablenwert zuzugreifen.
Wir können eine Methode namens getSSN()
erstellen, die den Wert des Attributs __SSN
wie unten gezeigt zurückgibt.
class Person:
def __init__(self, name, age, SSN):
self.name = name
self.age = age
self.__SSN = SSN
def getSSN(self):
return self.__SSN
person1 = Person(name="Alex", age=15, SSN=1234567890)
print("Name of the person is:", person1.name)
print("Age of the person is:", person1.age)
print("SSN of the person is:", person1.getSSN())
Ausgabe:
Name of the person is: Alex
Age of the person is: 15
SSN of the person is: 1234567890
Anstatt eine Methode zu definieren, können wir direkt auf die private Variable zugreifen. Sehen wir uns an, wie die privaten Variablen im Speicher gespeichert werden. Wenn wir einen Variablennamen mit dem doppelten Unterstrich (__
) definieren, sagt der Python-Interpreter, dass es kein solches Attribut gibt.
Um zu verstehen, wie die Variable gespeichert wird, überprüfen wir alle Attribute des angegebenen Objekts. Wir verwenden die Funktion dir()
, die ein Objekt oder Eingabeargumente entgegennimmt und eine Liste aller Objektattribute zurückgibt. Lassen Sie uns die Attribute des Objekts person1
mit der Funktion dir()
überprüfen.
class Person:
def __init__(self, name, age, SSN):
self.name = name
self.age = age
self.__SSN = SSN
def getSSN(self):
return self.__SSN
person1 = Person(name="Alex", age=15, SSN=1234567890)
print("Attributes of the Person are:")
print(dir(person1))
Ausgabe:
Attributes of the Person are:
['_Person__SSN', '__doc__', '__init__', '__module__', 'age', 'getSSN', 'name']
Beachten Sie, dass die Attribute name
und age
vorhanden sind, aber kein Attribut __SSN
. Es gibt jedoch ein Attribut namens _Person__SSN
. Lassen Sie uns den Wert dieses Attributs für das Objekt person1
drucken.
class Person:
def __init__(self, name, age, SSN):
self.name = name
self.age = age
self.__SSN = SSN
def getSSN(self):
return self.__SSN
person1 = Person(name="Alex", age=15, SSN=1234567890)
print("Name of the person is:", person1.name)
print("Age of the person is:", person1.age)
print("SSN of the person is:", person1._Person__SSN)
Ausgabe:
Name of the person is: Alex
Age of the person is: 15
SSN of the person is: 1234567890
Beachten Sie, dass das Attribut _Person__SSN
den gleichen Wert wie __SSN
hat. Das Attribut __SSN
wird im Programm als _Person__SSN
hinterlegt. Immer wenn wir auf das Attribut __SSN
zugreifen, läuft das Programm in eine AttributeError
-Ausnahme.
Wenn wir in Python ein Attribut mit doppeltem Unterstrich (__
) definieren, fügt das Programm _className
vor dem Attributnamen hinzu. Dieser Vorgang wird Mangeln genannt.
Python nimmt wahr, dass die mit doppelten Unterstrichen benannten Attribute beim Mangling private Variablen sind. Dies ist jedoch nicht wahr, da wir mit der Syntax _className__attributeName
auf die Variablen zugreifen können.
Fazit zu privaten Python-Variablen
In diesem Artikel haben wir private Variablen in Python besprochen. Wir haben gesehen, dass wir im Gegensatz zu anderen Programmiersprachen kein bestimmtes Schlüsselwort haben, um eine private Variable in Python zu deklarieren. Wir können jedoch die Implementierung privater Variablen simulieren, indem wir die Variablen mit einem doppelten Unterstrich benennen.
Wir haben auch zwei Möglichkeiten für den Zugriff auf private Variablen in Python besprochen. Wir würden vorschlagen, Methoden für den Zugriff auf private Variablen zu verwenden. Die Verwendung des Ansatzes mit dem Klassennamen zerstört die Essenz der Implementierung privater Variablen, da wir direkt auf die Variable zugreifen werden. Das Programm warnt Sie vor dem Zugriff auf die privaten Variablen mit dem _className
vor dem Attributnamen.
Aditya Raj is a highly skilled technical professional with a background in IT and business, holding an Integrated B.Tech (IT) and MBA (IT) from the Indian Institute of Information Technology Allahabad. With a solid foundation in data analytics, programming languages (C, Java, Python), and software environments, Aditya has excelled in various roles. He has significant experience as a Technical Content Writer for Python on multiple platforms and has interned in data analytics at Apollo Clinics. His projects demonstrate a keen interest in cutting-edge technology and problem-solving, showcasing his proficiency in areas like data mining and software development. Aditya's achievements include securing a top position in a project demonstration competition and gaining certifications in Python, SQL, and digital marketing fundamentals.
GitHub