Am 26.05.2020 um 17:44 schrieb Оlе Ѕtrеісhеr:
Hallo,
wir möchten in einer Klasse eine Reihe von Attributen konsistent speichern; d.h. es gibt Beschränkungen für die verschiedenen Attribute. Die Idee ist, das durch Properties zu machen:
Also die Properties verwirren mich hier. Das Beispiel an einer Stelle auch... [siehe etwas weiter unten] Darum eine andere Frage: Gelten die Beschränkungen eines Attributs für alle Instanzen der Klasse? Falls Ja, die Beschränkungen als Klassenattribute einfach hinschreiben? class Cfg(object): def __init__(self): self._myprop = 1.23 # hier wirklich .myprop ? @property def myprop(self): return self._myprop _maxprop = 1.24 @myprop.setter def myprop(self, val): if val > self._maxprop: # als Beispiel raise ValueError() self._myprop = val if __name__ == '__main__': versuch = Cfg() print(versuch.myprop) # gibt 1.23 aus versuch.myprop = 1 print(versuch.myprop) # gibt 1 aus versuch.myprop = 1.25 # wirft ValueError print(versuch.myprop) Grüße, Andreas
Class Cfg: def __init__(self); self._myprop = 1.23
[...]
@property def myprop(self) return self._myprop
@myprop.setter def myprop(self, val): if val > self._maxprop: # als Beispiel raise ValueError() self._myprop = val
Das Unschöne daran ist, dass die Initialisierung der Property im __init__ und damit physisch weit entfernt vom Rest erfolgt. Das ist, wenn man viele (>>20) Attribute hat, nicht mehr übersichtlich.
Wie bringt man die enger zusammen? Ein @myprop.init gibt es ja offensichtlich nicht und kann man auch nicht so ohne weiteres anlegen, oder? Oder was wäre ein sinnvolles Pattern hier?
Schöne Grüße
Ole