Frage bzgl. Python Syntax

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
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 :-))
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

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:
TUFKAB – the user formerly known as blackbird
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

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.
Antworten