getattr-und setattr auf verschachtelte Objekte?

dies ist wahrscheinlich ein einfaches problem, so hopefuly Ihre leicht, jemanden darauf hinweisen, meine Fehler sind, oder ob dies überhaupt möglich ist.

Ich habe ein Objekt, das mehrere Objekte als Eigenschaften. Ich möchte in der Lage sein, dynamisch die Eigenschaften dieser Objekte wie so:

class Person(object):
    def __init__(self):
        self.pet = Pet()
        self.residence = Residence()

class Pet(object):
    def __init__(self,name='Fido',species='Dog'):
        self.name = name
        self.species = species

class Residence(object):
    def __init__(self,type='House',sqft=None):
        self.type = type
        self.sqft=sqft


if __name__=='__main__':
    p=Person()
    setattr(p,'pet.name','Sparky')
    setattr(p,'residence.type','Apartment')
    print p.__dict__

Ausgabe:

{'pet': <main.Haustier Objekt an 0x10c5ec050>, 'residence': <main.Residence Objekt in 0x10c5ec0d0>, 'pet.name': 'Sparky', 'residence'.type': 'Wohnung'}

Wie Sie sehen können, eher dann mit dem name-Attribut auf das Haustier-Objekt der person, der ein neues Attribut "pet.name" erstellt.

Kann ich nicht angeben, person.pet setattr, weil verschiedene Kind-Objekte werden durch die gleiche Methode, die in der Analyse von text und ausfüllen der Objekt-Attribute, wenn/wenn Sie eine entsprechende Taste zu finden ist.

Gibt es eine einfache/Baujahr Art und Weise, dies zu erreichen?

Oder vielleicht brauche ich, um schreiben Sie eine rekursive Funktion zum Parsen der Zeichenfolge und der Aufruf von getattr mehrere Male, bis die notwendigen Kind-Objekt gefunden und dann call setattr auf das Gefundene Objekt?

Danke!

InformationsquelleAutor TPB | 2015-07-02
Schreibe einen Kommentar