GeeksforGeeks

Voraussetzung: Unterstrich in Python
In Python gibt es keine „privaten“ Instanzvariablen, auf die nur innerhalb eines Objekts zugegriffen werden kann. Allerdings gibt es eine Konvention, die von den meisten Python-Programmierern befolgt wird: Ein Name, dem ein Unterstrich vorangestellt ist, wie z.B. _geek, sollte als nicht-öffentlicher Teil der API oder jedes Python-Codes behandelt werden, egal ob es sich um eine Funktion, eine Methode oder ein Datenelement handelt. Während wir dies durchgehen, werden wir auch versuchen, das Konzept der verschiedenen Formen von nachgestellten Unterstrichen zu verstehen, z.B. for _ in range(10), __init__(self).

Mangling und wie es funktioniert

In Python gibt es etwas, das als „name mangling“ bezeichnet wird, was bedeutet, dass es eine begrenzte Unterstützung für einen gültigen Anwendungsfall für klassenprivate Mitglieder gibt, im Wesentlichen um Namenskonflikte mit Namen zu vermeiden, die von Unterklassen definiert wurden. Jeder Bezeichner der Form __geek (mindestens zwei führende Unterstriche oder höchstens ein nachgestellter Unterstrich) wird durch _classname__geek ersetzt, wobei classname der aktuelle Klassenname ohne führende(n) Unterstrich(e) ist. Solange es innerhalb der Klassendefinition vorkommt, wird dieses Mangling durchgeführt. Dies ist hilfreich, damit Unterklassen Methoden überschreiben können, ohne klasseninterne Methodenaufrufe zu unterbrechen.
Schauen wir uns dieses Beispiel an und versuchen wir herauszufinden, wie dieser Unterstrich funktioniert:

Die Mangling-Regeln sind hauptsächlich dazu gedacht, Unfälle zu vermeiden, aber es ist immer noch möglich, auf eine Variable zuzugreifen oder sie zu verändern, die als privat gilt. Dies kann unter besonderen Umständen sogar nützlich sein, z.B. im Debugger.

Einfache führende Unterstriche

Ein Unterstrich am Anfang einer Methode, Funktion oder eines Datenelements bedeutet also, dass man auf diese Methode nicht zugreifen darf, weil sie nicht Teil der API ist. Schauen wir uns diesen Codeschnipsel an:

Der Ausschnitt stammt aus dem Django-Quellcode (django/forms/forms.py). Das deutet darauf hin, dass errors eine Eigenschaft ist, die auch Teil der API ist, aber die Methode _get_errors ist „privat“, man sollte also nicht darauf zugreifen.

__Doppelte führende Unterstriche

Zwei Unterstriche am Anfang sorgen für viel Verwirrung. Hier geht es eher um die Syntax als um eine Konvention. Der doppelte Unterstrich wird die Attributnamen einer Klasse verstümmeln, um Konflikte von Attributnamen zwischen Klassen zu vermeiden. Zum Beispiel:

Doppelte führende und doppelte nachgestellte Unterstriche__

Es gibt noch einen weiteren Fall von doppelten führenden und nachgestellten Unterstrichen. Wir befolgen dies bei der Verwendung spezieller Variablen oder Methoden (genannt „magic method“) wie__len__, __init__. Diese Methoden verleihen den Namen besondere syntaktische Eigenschaften. Zum Beispiel gibt __file__ den Ort der Python-Datei an, __eq__ wird ausgeführt, wenn ein == b Ausdruck ausgeführt wird.
Beispiel:

Python

classGeek:
def__init__(self, ab):
self.ab =ab
def__custom__(self):
pass



This article is contributed by Chinmoy Lenka. Wenn Ihnen GeeksforGeeks gefällt und Sie einen Beitrag leisten möchten, können Sie auch einen Artikel unter contribute.geeksforgeeks.org schreiben oder eine E-Mail an [email protected] schicken. So erscheint Ihr Artikel auf der GeeksforGeeks-Hauptseite und hilft anderen Geeks.
Ich habe auf Python Docs, hackernoon.com und igorsobreira.com verwiesen
Bitte schreiben Sie Kommentare, wenn Sie etwas falsch finden oder weitere Informationen zum oben genannten Thema mitteilen möchten.

Achtung Geek! Stärken Sie Ihr Fundament mit dem Python Programming Foundation Course und lernen Sie die Grundlagen.

Zu Beginn Ihrer Interviewvorbereitungen erweitern Sie Ihre Datenstrukturkonzepte mit dem Python DS Kurs.

Artikel-Tags :