Seite 1 von 1

properies for dict member

Verfasst: Sonntag 31. August 2008, 15:31
von fuppes
Hallo,

ist es moeglich die properties fur meien class so einzurichten das die setter methode aufgerufen wirde wenn eine element des dicts einen neuen wert zugeweisen bekommen?

Beispiel:

Code: Alles auswählen

class dependency_object(object):
    def __init__(self, xml):
        self.xml = xml
        


    def compare_to(self, other, with_version = False):
        if self.coor['groupId'] == other.coor['groupId']:
            if self.coor['artifactId'] == other.coor['artifactId']:
                if with_version:
                    if self.coor['version'] == other.coor['version']:
                        return True
                    else:
                        return False
                else:
                    return False

    def get_coor(self):
        return apf.getCoordinates_as_dict(self.xml)

    def set_coor(self, new):
        print 'neuer wert', new
       


    coor = property(get_coor, set_coor)
Die setter wird ja ausgeführt wenn ich coor einen neuen wert zuweise:
testing.coor = 'neuerWert'

Wenn ich jedoch einem element in dem dict einen neuen wert zuweise wird die setter nicht ausgefuehrt:
testing.coor['groupId'] = 'newGroupId'

Gibt es da ne möglichkeit das auch fuer diesen fall die Setter aufgreufen wird?

Verfasst: Sonntag 31. August 2008, 18:19
von sma
Da musst du schon in `getCoordinates_as_dict` etwas zurückliefern, dass dein gewünschtes Verhalten implementiert. Du hast es doch in der Hand.

Eine Möglichkeit wäre z.B. eine Unterklasse von `dict`, bei der du `__setitem__` überschrieben hast. Das erwischt aber nicht alle destruktiven Änderungen, sodass ich diese Weg lieber nicht gehen würde, sondern statt eines `dict` ein komplett eigenes Objekt benutzen würde, wo du Änderungen besser im Griff hast.

So, wie du das dict benutzt, scheint mir das eh besser ein Exemplar einer eigenen Klasse zu sein, die Attribute für groupId, artifactId, version, usw. hat.

Stefan