Neue Typzuweisung an Attribute via Property

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
Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

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?
When we say computer, we mean the electronic computer.
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten