Weiter zum Inhalt

Property vs. Getter und Setter in Python

In diesem Tutorial lernst du den Unterschied zwischen Python Property und Getter & Setter kennen.
Aktualisiert 18. Sept. 2026  · 6 Min. lesen

Mit KI erkunden

ChatGPTClaudePerplexity

Was sind Getter und Setter?

  • Getter: Methoden in der Objektorientierten Programmierung (OOP), mit denen du auf private Attribute einer Klasse zugreifen kannst.
  • Setter: Methoden in OOP, mit denen du den Wert privater Attribute in einer Klasse setzt.

Private Attribute – Kapselung

Wenn dir private Attribute oder private Methoden in Python neu sind, lies diesen DataCamp Artikel.

Schauen wir uns an, wie du ein privates Attribut in Python umsetzt.

class SampleClass:

    def __init__(self, a):
        ## private varibale or property in Python
        self.__a = a

    ## getter method to get the properties using an object
    def get_a(self):
        return self.__a

    ## setter method to change the value 'a' using an object
    def set_a(self, a):
        self.__a = a

SampleClass hat drei Methoden.

  • __init__: Initialisiert die Attribute bzw. Eigenschaften einer Klasse.

    • __a: Ein privates Attribut.
  • get_a: Liest den Wert des privaten Attributs a aus.
  • set_a: Setzt den Wert von a über ein Objekt der Klasse.

Auf private Variablen kannst du in Python nicht direkt zugreifen. Deshalb hast du die Getter-Methode implementiert.

So funktioniert die Klasse:

## creating an object
obj = SampleClass(10)

## getting the value of 'a' using get_a() method
print(obj.get_a())

## setting a new value to the 'a' using set_a() method
obj.set_a(45)

print(obj.get_a())
10
45

So implementierst du private Attribute, Getter und Setter in Python. Genauso wird es in Java gemacht. Schreiben wir das nun auf pythonice Art.

class PythonicWay:

    def __init__(self, a):
        self.a = a

Du brauchst keine Getter- oder Setter-Methoden, um auf Attribute zuzugreifen oder sie zu ändern. Du greifst direkt über den Namen des Attributs darauf zu.

Schauen wir mal:

## Creating an object for the 'PythonicWay' class
obj = PythonicWay(100)

print(obj.a)
100

Worin unterscheiden sich die beiden Klassen?

  • SampleClass verbirgt private Attribute und Methoden. Sie setzt die Kapselung in OOP um.
  • PythonicWay verbirgt die Daten nicht und verwendet keine Kapselung.

Was ist besser?

  • Das hängt vom Anwendungsfall ab. Wenn du private Attribute und Methoden brauchst, implementierst du die Klasse mit Setter- und Getter-Methoden, sonst nimmst du den direkten, einfachen Ansatz.

Property

Was ist, wenn du beim Setzen eines Attributwerts in der SampleClass Bedingungen prüfen möchtest?

Angenommen, der übergebene Wert ist gerade und positiv: Dann setzen wir ihn. Andernfalls setzen wir den Wert auf 2.

Das implementieren wir, indem wir die Methode set_a() in der SampleClass anpassen.

class SampleClass1:

    def __init__(self, a):
        ## calling the set_a() method to set the value 'a' by checking certain conditions
        self.set_a(a)

    ## getter method to get the properties using an object
    def get_a(self):
        return self.__a

    ## setter method to change the value 'a' using an object
    def set_a(self, a):

        ## condition to check whether 'a' is suitable or not
        if a > 0 and a % 2 == 0:
            self.__a = a
        else:
            self.__a = 2

Testen wir die Klasse, indem wir ein Objekt erzeugen.

## creating an object for the class 'SampleClass1'
obj = SampleClass1(16)

print(obj.get_a())
16

So setzt du dieselbe Klasse mit dem @property-Decorator um.

class Property:

    def __init__(self, var):
        ## initializing the attribute
        self.a = var

    @property
    def a(self):
        return self.__a

    ## the attribute name and the method name must be same which is used to set the value for the attribute
    @a.setter
    def a(self, var):
        if var > 0 and var % 2 == 0:
            self.__a = var
        else:
            self.__a = 2

@property dient dazu, den Wert eines privaten Attributs ohne separate Getter-Methode auszulesen. Setze @property vor die Methode, die die private Variable zurückgibt.

Zum Setzen des privaten Attributs nutzt du @method_name.setter vor der entsprechenden Methode. Damit fungiert sie als Setter.

Testen wir die Klasse Property, um zu prüfen, ob die Decoratoren korrekt greifen.

## creating an object for the class 'Property'
obj = Property(23)

print(obj.a)
2

@a.setter setzt den Wert von a nach den in der Methode definierten Bedingungen. Eine weitere Möglichkeit, property zu verwenden, ist …

class AnotherWay:

    def __init__(self, var):
        ## calling the set_a() method to set the value 'a' by checking certain conditions
        self.set_a(var)

    ## getter method to get the properties using an object
    def get_a(self):
        return self.__a

    ## setter method to change the value 'a' using an object
    def set_a
    (self, var):

        ## condition to check whether var is suitable or not
        if var > 0 and var % 2 == 0:
            self.__a = var
        else:
            self.__a = 2

    a = property(get_a, set_a)

Übergebe die Getter- und Setter-Methoden an property und weise das Ergebnis der Variablen zu, die du als Klassenattribut verwenden willst.

## creating an object for the 'AnotherWay' class
obj = AnotherWay(28)

print(obj.a)
28

Mache die Setter- und Getter-Methoden privat, um sie zu verbergen. So geht's:

class FinalClass:

    def __init__(self, var):
        ## calling the set_a() method to set the value 'a' by checking certain conditions
        self.__set_a(var)

    ## getter method to get the properties using an object
    def __get_a(self):
        return self.__a

    ## setter method to change the value 'a' using an object
    def __set_a(self, var):

        ## condition to check whether var is suitable or not
        if var > 0 and var % 2 == 0:
            self.__a = var
        else:
            self.__a = 2

    a = property(__get_a, __set_a)

Prüfen wir, ob alles wie erwartet funktioniert.

## creating an object for the 'AnotherWay' class
obj = FinalClass(12)

print(obj.a)
12

Fazit

Du hast gesehen, wie du Kapselung in Python umsetzt und worin sich Setter, Getter und property unterscheiden.

Wenn du neu bei Python bist, empfehle ich dir den kostenlosen DataCamp-Kurs Introduction to Python.

Wenn du Fragen zu diesem Artikel hast, schreib sie gerne in die Kommentare. Viel Spaß beim Coden!

Themen
Python

Mehr über Python lernen

Kurs

Einführung in Python

4 Std.
7M
Lerne in nur vier Stunden die Grundlagen der Datenanalyse mit Python und entdecke beliebte Python-Pakete.
Details anzeigenRight Arrow
Kurs Starten
Mehr anzeigenRight Arrow