Seite 1 von 1

Getter/Setter in Python

Verfasst: Mittwoch 8. Dezember 2010, 10:35
von KingNothing
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?

Re: Getter/Setter in Python

Verfasst: Mittwoch 8. Dezember 2010, 10:40
von cofi
Ja, das ist die idiomatische Variante. Jetzt solltest du nur noch an der Namensgebung arbeiten, siehe PEP 8.

Re: Getter/Setter in Python

Verfasst: Mittwoch 8. Dezember 2010, 11:50
von 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