Seite 1 von 1

Neue Typzuweisung an Attribute via Property

Verfasst: Dienstag 29. Dezember 2020, 14:16
von sls
Hallo zusammen,

ich habe vermutlich zu schnell auf Java gewechselt, leider weiß ich nicht ob folgender Fall idiomatisches Python ist:

Code: Alles auswählen

class A:

    def __init__(self, attribute=1):
        self._attribute = attribute

    @property
    def attribute(self):
        return self._attribute

    @attribute.setter
    def attribute(self, value):
        self._attribute = value


def main():
    a = A()
    a.attribute = (5, 10)


if __name__ == '__main__':
    main()
Konkret geht es um folgendes externe Modul: https://github.com/marcospereirampj/pyt ... ion.py#L81

Hier wird ein timeout vom typ int gesetzt, das wird an späterer Stelle für requests verwendet, welches sowohl ein tupel als auch ein float akzeptiert. Das Modul implementiert ja schon ein property, nur leider macht das noch nichts besonderes. Wäre das evtl. schon ein Fall in dem man das Property aufbohren und hier den Typ vorher prüfen und dann entsprechend setzen könnte?

Re: Neue Typzuweisung an Attribute via Property

Verfasst: Dienstag 29. Dezember 2020, 15:50
von __blackjack__
@sls: Ich verstehe die Frage nicht wirklich. Triviale Getter und Setter sind unpythonisch und `proptery()` dafür zu verwenden natürlich auch, das ändert ja nichts daran, dass das total sinnlose Schreibarbeit ist. Ein führender Unterstrich bedeutet Implementierungsdetail, aber wenn es dann einen Getter und einen Setter gibt, wo ist denn dann effektiv der Unterschied zu einem ganz normalen öffentlichen Attribut?

Der Code sollte einfach so aussehen:

Code: Alles auswählen

class A:
    def __init__(self, attribute=1):
        self.attribute = attribute


def main():
    a = A()
    a.attribute = (5, 10)
Der verlinkte Code auf Github ist an der Stelle auch unsinnig mit den ganzen trivialen Getter/Setter-Properties für ”Implementierungsdetails” die faktisch damit gar keine mehr sind. Das ist einfach nur ganz viel unsinniger Boilerplate-Code.

Die Frage einer Typprüfung ist dazu orthogonal. Wenn man `property()` nur einsetzt um bei Zuweisungen immer den Typ prüfen zu können, möchte man IMHO nicht Python verwenden, sondern eine statisch typisierte Programmiersprache.