unveränderbare string const

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Muchtar
User
Beiträge: 10
Registriert: Montag 14. Oktober 2013, 13:32

Hallo,

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

Danke
Muchtar
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Indem du sie GROSS schreibst. Anders als per Konvention (siehe PEP 8) gibt es in Python keine konstanten Namen, nur konstante Werte.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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).
Muchtar
User
Beiträge: 10
Registriert: Montag 14. Oktober 2013, 13:32

Got it :wink: DAnke
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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.
Antworten