Kapselung ist eines der grundlegenden Konzepte in Objektorientierte Programmierung (OOP) in Python. Es beschreibt die Idee, Daten zu verpacken, und die Methoden, die mit Daten innerhalb einer Einheit arbeiten. Dies schränkt den direkten Zugriff auf Variablen und Methoden ein und kann eine versehentliche Änderung von Daten verhindern. Eine Klasse ist ein Beispiel für Kapselung, da sie alle Mitgliedsdaten kapselt Funktionen , Variablen usw. Nun kann es einige Szenarien geben, in denen wir Einschränkungen für einige Methoden der Klasse festlegen müssen, sodass weder außerhalb der Klasse noch von Unterklassen auf sie zugegriffen werden kann. Um dies umzusetzen, kommen private Methoden ins Spiel.
PPrivate Funktionen in Python
Stellen Sie sich ein reales Beispiel vor, einen Automotor, der aus vielen Teilen wie Zündkerzen, Ventilen, Kolben usw. besteht. Kein Benutzer verwendet diese Teile direkt, sondern weiß nur, wie er die Teile verwendet, die ihn verwenden. Dafür werden private Methoden verwendet. Es wird verwendet, um die innere Funktionalität einer Klasse vor der Außenwelt zu verbergen. Private Methoden sind Methoden, auf die weder außerhalb der Klasse noch von einer Basisklasse zugegriffen werden sollte. In Python gibt es keine privaten Methoden, auf die nur innerhalb einer Klasse zugegriffen werden kann. Um jedoch eine private Methode zu definieren, stellen Sie dem Mitgliedsnamen das voran doppelter Unterstrich __ . Notiz: Die __init__-Methode ist eine Konstrukteur und läuft, sobald ein Objekt einer Klasse instanziiert wird.
Python3
Array-Liste Java
# Creating a Base class> class> Base:> ># Declaring public method> >def> fun(>self>):> >print>(>'Public method'>)> ># Declaring private method> >def> __fun(>self>):> >print>(>'Private method'>)> # Creating a derived class> class> Derived(Base):> >def> __init__(>self>):> ># Calling constructor of> ># Base class> >Base.__init__(>self>)> >def> call_public(>self>):> ># Calling public method of base class> >print>(>'
Inside derived class'>)> >self>.fun()> >def> call_private(>self>):> ># Calling private method of base class> >self>.__fun()> # Driver code> obj1>=> Base()> # Calling public method> obj1.fun()> obj2>=> Derived()> obj2.call_public()> # Uncommenting obj1.__fun() will> # raise an AttributeError> # Uncommenting obj2.call_private()> # will also raise an AttributeError> |
>
Binärbaum vs. binärer Suchbaum
>
Ausgabe:
Public method Inside derived class Public method>
Traceback (most recent call last): File '/home/09d6f91fdb63d16200e172c7a925dd7f.py', line 43, in obj1.__fun() AttributeError: 'Base' object has no attribute '__fun' Traceback (most recent call last): File '/home/0d5506bab8f06cb7c842501d9704557b.py', line 46, in obj2.call_private() File '/home/0d5506bab8f06cb7c842501d9704557b.py', line 32, in call_private self.__fun() AttributeError: 'Derived' object has no attribute '_Derived__fun'>
Das obige Beispiel zeigt, dass auf private Methoden der Klasse weder außerhalb der Klasse noch von einer Basisklasse aus zugegriffen werden kann. Auf private Methoden kann jedoch zugegriffen werden, indem die privaten Methoden über öffentliche Methoden aufgerufen werden.
Beispiel:
Python3
Java int als String
# Creating a class> class> A:> ># Declaring public method> >def> fun(>self>):> >print>(>'Public method'>)> ># Declaring private method> >def> __fun(>self>):> >print>(>'Private method'>)> ># Calling private method via> ># another method> >def> Help>(>self>):> >self>.fun()> >self>.__fun()> # Driver's code> obj>=> A()> obj.>Help>()> |
>
>
Ausgabe:
Beispiel für JSON-Daten
Public method Private method>
Namensverfälschung
Python bietet einen Zauberstab, mit dem auch private Methoden außerhalb der Klasse aufgerufen werden können. Dies wird als Namensmangling bezeichnet. Dies bedeutet, dass jeder Bezeichner der Form __geek (mindestens zwei führende Unterstriche oder höchstens ein nachfolgender Unterstrich) durch _classname__geek ersetzt wird, wobei der Klassenname der aktuelle Klassenname ist, wobei ein oder mehrere führende Unterstriche entfernt wurden.
Beispiel:
Python3
Unterschied zwischen Binärbaum und binärem Suchbaum
# Creating a class> class> A:> ># Declaring public method> >def> fun(>self>):> >print>(>'Public method'>)> ># Declaring private method> >def> __fun(>self>):> >print>(>'Private method'>)> # Driver's code> obj>=> A()> # Calling the private member> # through name mangling> obj._A__fun()> |
>
>
Ausgabe:
Private method>