Seite 1 von 1

Frage bzgl. Python Syntax

Verfasst: Sonntag 22. Januar 2006, 10:38
von Mark Fink
ich arbeite derzeit an einem einfachen XMLBuilder in Jython und finde keine Antwort auf ein Problem (Jython Buch befindet sich noch auf dem Postweg):

# so funzt es
b=XMLBuilder()
b.name={"person": "flintstone"}
:
:
# ich würde die Klasse aber lieber so nutzen
b={"name": {"person": "flintstone"}}

Gibt es dazu eine Lösung durch überladen von Operatoren o.ä?

Sorry, falls das nicht exact das richtige Forum für solche Fragen ist. Hier finde ich wenigstens meinen eigenen Thread wieder :-))

Verfasst: Sonntag 22. Januar 2006, 10:51
von mitsuhiko
depends on your class dude :-)

Ein weg were das Ding mit einer fromdict methode auszustatten:

Code: Alles auswählen

class MyXMLBuilder(XMLBuilder):

    @staticmethod
    def from_dict(d):
        res = self()
        for key, value in d.iteritems():
            setattr(res, key, value)
        return res
Verwende kannst du es dann so:

Code: Alles auswählen

c = MyXMLBuilder.from_dict({'name': {'person': 'flintstone'}})
Und das hat nichts mit Operatorn Überladen zu tun. :wink:

Verfasst: Sonntag 22. Januar 2006, 11:21
von modelnine
Um wieder zur semantischen Frage zurückzukommen: die Zuweisung kann man in Python nicht überladen, sie bedeutet, in der Abwesenheit von Punkten im Namen (also kein Attribut) immer das Setzen des entsprechenden Namens im momentanen Namespace. Auch wenn ein Attribut auftaucht bedeutet sie das, nur kann man bei einem "Unter-Namespace" wie zum Beispiel einer Klasse das __setattr__ abfangen.

--- Heiko.