Private Variablen in Python

Aditya Raj 14 April 2022
  1. Was ist eine private Variable in Python?
  2. Wie implementiert man eine private Variable in Python?
  3. Zugriff auf private Variablen in Python
  4. Fazit zu privaten Python-Variablen
Private Variablen in Python

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.

Autor: Aditya Raj
Aditya Raj avatar Aditya Raj avatar

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

Verwandter Artikel - Python Variable