Behandeln Sie Python-Variablen in der Klasse als private Variablen

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

Behandeln Sie Python-Variablen in der Klasse als private Variablen
[Python] -Variablen
Python Hinweis: Behandeln Sie Listen gemeinsam als Satz
(Python) Behandeln Sie ganzzahlige Werte als eine Reihe von Flags
Private Python-Lernprozedur
Python: Klassen- und Instanzvariablen
Informationen zu Python-Variablen und -Objekten
Python-Notizen zur Verwendung von Perl-Spezialvariablen
Behandeln Sie Umgebungsvariablen in Python
# 1 [python3] Einfache Berechnung mit Variablen
Python-Klassen- und Instanzvariablen
Python-Anfängerhandbuch (Variationen / Arrays)
Python-Variablen und Objekt-IDs
Python: Verwenden Sie die im Zeichenfolgenformat definierten Variablen unverändert