Wenn ich eine Modulebene-Variable mit __
erstellt und versucht, es innerhalb einer Methode einer Klasse (mit global
Schlüsselwort) zuzugreifen, trat die Namensänderung auf.Python-Name Mangling auf globale Variable mit __
Lassen Sie mich ein Beispiel zeigen:
__test = 'asd' # module level variable with __
class TestClass(object):
def test(self):
global __test
print(__test) # trying to access this variable
a = TestClass()
a.test()
Interpreter angehoben einen Fehler:
NameError: name '_TestClass__test' is not defined
So, wie wir es versucht, Namen-mangle __test
in _TestClass__test
sehen können.
Ich dachte, dass Name-Mangeln für Klassenvariablen sollten nur verwendet werden (wenn ich sie Zugriff mit self
oder Klassenname).
Ist es ein gut definiertes Verhalten, das ich nicht bewusst sind oder es ist eine Art von Python Bug?
Getestet habe ich es auf CPython 3,5
Warum erstellen Sie * "eine Variable auf Modulebene mit' __'" *? – jonrsharpe
Hinweis gesagt wird, wie aus der Dokumentation zitiert * „Diese Mangeln wird ohne Rücksicht auf die syntaktische Position des Bezeichners“ * – jonrsharpe
Eigentlich eine von mir Studenten (I Lehr Python auf einer bestimmten Ebene Anfänger) dies tat, und ich war nicht sicher, warum es habe nicht für ihn gearbeitet. – Pax0r