Seite 1 von 1

Pythonischer Setter meldet Fehler, aber normale Setter-Methode funktioniert

Verfasst: Samstag 1. Juni 2019, 13:56
von Atalanttore
Hallo

Im unteren Beispiel zum Festlegen von Koordinaten habe ich Getter und Setter ganz pythonisch als `property` umgesetzt. Der pythonische Setter schlägt aber mit folgender Fehlermeldung fehl:

Code: Alles auswählen

Traceback (most recent call last):
  File "/home/ata/source/property-test.py", line 21, in <module>
    element.coordinates((7, 2, 9))
TypeError: 'tuple' object is not callable
Eine normale Setter-Methode (`set_coordinates()`) zum Festlegen der Koordinaten funktioniert hingegen problemlos. Unterstützt der pythonische Setter keine Tupel?

Code: Alles auswählen

class Element:
    def __init__(self, x, y, z):
        self._x = x
        self._y = y
        self._z = z

    @property
    def coordinates(self):
        return self._x, self._y, self._z

    @coordinates.setter
    def coordinates(self, new_coordinate):
        self._x, self._y, self._z = new_coordinate

    def set_coordinates(self, new_coordinate):
        self._x, self._y, self._z = new_coordinate

element = Element(10, 5, 8)
element.set_coordinates((5, 3, 8))
print(element.coordinates)

element.coordinates((7, 2, 9))
Gruß
Atalanttore

Re: Pythonischer Setter meldet Fehler, aber normale Setter-Methode funktioniert

Verfasst: Samstag 1. Juni 2019, 14:10
von Sirius3
Properties werden wie Attribute benutzt:

Code: Alles auswählen

element.coordinates = (7, 2, 9)

Re: Pythonischer Setter meldet Fehler, aber normale Setter-Methode funktioniert

Verfasst: Samstag 1. Juni 2019, 15:08
von Atalanttore
@Sirius3: Also ein Denkfehler meinerseits.

Re: Pythonischer Setter meldet Fehler, aber normale Setter-Methode funktioniert

Verfasst: Samstag 1. Juni 2019, 19:30
von sls
@Atalanttore: warum hast du ein Property-Setter `coordinates` und zusätzlich eine Methode `set_coordinates`?

Re: Pythonischer Setter meldet Fehler, aber normale Setter-Methode funktioniert

Verfasst: Samstag 1. Juni 2019, 21:06
von Atalanttore
@sls: Zur Demonstration, dass die normale Setter-Methode funktioniert, aber der pythonische `property`-Setter wegen meinem Denkfehler nicht (siehe Beitrag von Sirius3).

Gruß
Atalanttore

Re: Pythonischer Setter meldet Fehler, aber normale Setter-Methode funktioniert

Verfasst: Samstag 1. Juni 2019, 21:23
von sls
@Atalanttore: falls du dir den Part zu Properties noch nicht in der offiziellen Doku reingezogen hast: https://docs.python.org/3/library/funct ... y#property

Da wird eigentlich schnell klar warum die Zuweisung direkt geschieht: das Property-Objekt ist ein spezielles Attribut im Namensraum deiner Klasse. Der Dekorator `@property` nimmt dir diese Magie ab.

Re: Pythonischer Setter meldet Fehler, aber normale Setter-Methode funktioniert

Verfasst: Sonntag 2. Juni 2019, 15:53
von Atalanttore
@sls: Reingezogen schon, aber nicht mehr dran gedacht.