Getter/Setter in Python

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
KingNothing
User
Beiträge: 9
Registriert: Dienstag 30. November 2010, 11:49

Hallo,
eine Frage zum Thema getter/setter. Generell ist das ja ein Konzept was von anderen Programmiersprachen wie zB C++, Java kommt. Getter und Setter haben, soweit ich weiss, den zweck zB kontrollmöglichkeiten etc noch nachträglich einbauen zu können oder auch einen "read-only" zugriff zu realisieren.

Mein gedanke ist jetzt, das Getter und Setter relativ lästig sind, vorallem wenn sie keine erweiterte Funktionaltät enthalten. Deswegen würde ich sie erstmal weglassen.

Code: Alles auswählen

class A:
    def __init__(self):
        self.var=0

a = A()
a.var += 1
print(a.var)
Wenn ich jetzt nachträglich feststelle das ich einen getter o.ä. benötige kann ich diesen ja mit property wunderbar und transparent integrieren:

Code: Alles auswählen

class A:
    def __init__(self):
        self.var=0

    def getVar(self):
        return self._var

    def setVar(self,var):
        if var<10:
                self._var=var

    var = property(getVar, setVar)

a = A()
a.var += 1
print(a.var)

Ist das grundsätzlich so richtig/zu empfehlen?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Ja, das ist die idiomatische Variante. Jetzt solltest du nur noch an der Namensgebung arbeiten, siehe PEP 8.
lunar

@KingNothing: Außerdem muss eine Klasse in Python 2.x explizit von "object" abgeleitet sein, um Eigenschaften in dieser Klasse definieren zu können. Zudem hat "property" mittlerweile auch eine schönere API:

Code: Alles auswählen

class Foo(object):
    @property
    def var(self):
        return self._var

    @var.setter
    def var(self, value):
        self._var = value
Antworten