Seite 1 von 1

unveränderbare string const

Verfasst: Dienstag 15. Oktober 2013, 17:11
von Muchtar
Hallo,

ich bin schon an dem Thema CONSTANTS gestolpert. Wie kann ich ein unveränderbare Variabel in einer Python-Klasse deklarieren?

Danke
Muchtar

Re: unveränderbare string const

Verfasst: Dienstag 15. Oktober 2013, 17:27
von cofi
Indem du sie GROSS schreibst. Anders als per Konvention (siehe PEP 8) gibt es in Python keine konstanten Namen, nur konstante Werte.

Re: unveränderbare string const

Verfasst: Dienstag 15. Oktober 2013, 17:29
von /me
Muchtar hat geschrieben:Wie kann ich ein unveränderbare Variabel in einer Python-Klasse deklarieren?
Du könntest über ein Property nur Lesezugriff erlauben.

Code: Alles auswählen

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

    @property
    def value(self):
        return self._value

bar = Foo()
print(bar.value)
bar.value = 7
Die letzte Zeile sollte dann einen Fehler bringen.

De facto kann man natürlich von außen den Wert ändern, wenn man direkt auf bar._value zugreift. Der führende Unterstrich ist allerdings ein eindeutiger Hinweis darauf, dass man die Finger von diesem Wert lassen sollte. Python forciert diese Kapselung im Gegensatz zu Java nicht technisch sondern setzt auf die Konvention.

Edit: cofi hat natürlich insofern recht, dass KONSTANTEN in Großbuchstaben geschrieben werden (sollten).

Re: unveränderbare string const

Verfasst: Dienstag 15. Oktober 2013, 17:32
von Muchtar
Got it :wink: DAnke

Re: unveränderbare string const

Verfasst: Dienstag 15. Oktober 2013, 17:41
von cofi
Um es nochmal hervorzuheben: /me hat auch hier keine Konstante, sondern der Name ist _ueber dieses Interface_ nicht aenderbar. D.h. man kann zwar `obj.value` nicht aendern, dafuer aber `obj._value` mit demselben Effekt.

Man verlagert also nur das Problem - auch wenn man sehr deutlich macht, dass das nicht geaendert werden sollte, aber das tut auch die Konvention schon.