In den folgenden Programmen kann der In-Class-Variablentest von außen manipuliert werden, was zu Fehlern führen kann.
class MyClass(object):
def __init__(self):
self.test = 'test'
t = MyClass()
print(t.test)
#Kann direkt bearbeitet werden
t.test = 'test2'
print(t.test)
test
test2
Sie können das Bearbeiten von außen unmöglich machen, indem Sie der Variablen in der Funktion ~~ einen doppelten Unterstrich hinzufügen. ~~ Selbst mit einem doppelten Unterstrich können Sie anscheinend in der folgenden Form bearbeiten, ohne einen Setter zu verwenden.
class MyClass(object):
def __init__(self):
self.__test = 'test'
@property
def test(self):
return self.__test
t = MyClass()
print(t.test)
#Bearbeiten ohne Setter
t._MyClass__test = 'test2'
print(t._MyClass__test)
#Kann nicht normal bearbeitet werden
t.__test = 'test3'
print(t.test)
test
test2
test2
In pep8 heißt es: "Im Allgemeinen sollten doppelt führende Unterstriche nur verwendet werden, um Namenskonflikte mit Attributen in Klassen zu vermeiden, die für Unterklassen ausgelegt sind." Es scheint nicht zu empfehlen. Wenn Sie es zu einer privaten Variablen machen möchten, fügen Sie am Anfang am Anfang einen einzelnen Unterstrich hinzu, um anzuzeigen, dass es sich um eine private Variable handelt.
class MyClass(object):
def __init__(self):
self._test = 'test'
@property
def test(self):
return self._test
@test.setter
def test(self, value):
self._test = value
t = MyClass()
print(t.test)
#Mit Setter bearbeiten
t.test = 'test2'
print(t.test)
test
test2
Es sollte beachtet werden, dass Sie tatsächlich bearbeiten und arbeiten können, ohne den Setter zu verwenden.
class MyClass(object):
def __init__(self):
self._test = 'test'
@property
def test(self):
return self._test
@test.setter
def test(self, value):
self._test = value
t = MyClass()
print(t.test)
#Mit Setter bearbeiten
t.test = 'test2'
print(t.test)
#Bearbeiten ohne Setter
t._test = 'test3'
print(t._test)
Recommended Posts