Heim > Backend-Entwicklung > Python-Tutorial > Wie privat sind die „privaten' Methoden von Python wirklich?

Wie privat sind die „privaten' Methoden von Python wirklich?

Barbara Streisand
Freigeben: 2024-12-11 12:15:11
Original
609 Leute haben es durchsucht

How Private Are Python's

Pythons „private“ Methoden: Nicht so undurchdringlich, wie sie scheinen

Trotz der falschen Vorstellung, dass Pythons „private“ Methoden eine starke Kapselung bieten, a Eine nähere Betrachtung zeigt, dass sie nicht wirklich privat sind. Während das Voranstellen einer Methode mit doppelten Unterstrichen (__myPrivateMethod()) einen privaten Bereich suggeriert, wird tatsächlich eine Methode mit einem geänderten Namen erstellt.

Zum Beispiel zeigt die folgende Klasse dieses Verhalten:

class MyClass:
    def myPublicMethod(self):
        print('public method')

    def __myPrivateMethod(self):
        print('this is private!!')
Nach dem Login kopieren

Wenn man ein Objekt dieser Klasse instanziiert, würde man erwarten, dass man nicht auf die private Methode zugreifen kann:

obj = MyClass()
obj.myPublicMethod()
Nach dem Login kopieren

Allerdings ein nachfolgender dir(obj)-Aufruf enthüllt die Existenz einer magisch erstellten Methode:

dir(obj)
['_MyClass__myPrivateMethod', '__doc__', '__module__', 'myPublicMethod']
Nach dem Login kopieren

Der Aufruf dieser Methode enthüllt die „privaten“ Daten:

obj._MyClass__myPrivateMethod()
Nach dem Login kopieren

Diese Namenskonvention wird verwendet, um verhindern, dass Unterklassen versehentlich private Methoden und Attribute ihrer Oberklassen überschreiben. Es behindert jedoch nicht den absichtlichen Zugriff von außen.

Zum Beispiel:

class Foo(object):
    def __init__(self):
        self.__baz = 42

    def foo(self):
        print(self.__baz)

class Bar(Foo):
    def __init__(self):
        super(Bar, self).__init__()
        self.__baz = 21

    def bar(self):
        print(self.__baz)

x = Bar()
x.foo()  # 42
x.bar()  # 21
print(x.__dict__)  # {'_Bar__baz': 21, '_Foo__baz': 42}
Nach dem Login kopieren

Zusammenfassend lässt sich sagen, dass die „privaten“ Methoden von Python nicht wirklich privat sind und Unterklassen den Zugriff darauf ermöglichen. Diese Designwahl priorisiert die Flexibilität der Unterklassen gegenüber der strikten Kapselung, erfordert aber auch einen umsichtigen Einsatz durch Entwickler, um die Codeintegrität aufrechtzuerhalten.

Das obige ist der detaillierte Inhalt vonWie privat sind die „privaten' Methoden von Python wirklich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage