nehme ich eine GUI baue die Attribute einer Sammlung von Building
Objekte zu ändern:Wörterbuch Tasten Klasse zuzugreifen Attribute
class Building:
def __init__(self, company, addr):
self.company = company
self.addr = addr
Jedes Mal, wenn ein neues Building
in der GUI markiert ist, sollten verschiedene Widgets zu aktualisieren, um spiegeln die Attribute dieses Objekts wider.
Ich möchte jedes Building-Attribut mit dem Widget verknüpfen, das es steuert. Vielleicht etwas in dieser Richtung:
attribute_widget_map = {
'company': company_widget,
'addr': addr:widget,
}
so dass, wenn ich gehen, um den Wert jedes Widget zu setzen, ich es wie folgt tun:
building = Building('XYZ', 'Anytown USA')
for attr, widget in attribute_widget_map.items():
widget.set_value(building.__getattr__(attr))
Mein Problem mit diesem: Ich mag das nicht Die Schlüssel in attribute_widget_map
sind String-Darstellungen von Building
Eigenschaften. Angenommen, ich ändere addr
zu address
. Der Code wird unterbrochen. Gibt es einen anderen Weg dies zu tun als sich auf __getattr__
zu verlassen?
Was sind die Alternativen?
So oder so, wenn Sie einen ändern, müssen Sie den anderen ändern. Nein? – idjaw
vielleicht hätte meine Frage sein sollen: Ist das eine angemessene Verwendung von '__getattr__'? – Crispin
Das scheint mir gut. Zugegeben, vielleicht könnte jemand mitkommen und etwas anderes zu sagen haben. Aber sieht gut zu mir aus. – idjaw