Dies ist wahrscheinlich ein einfaches Problem, so hoffnungsvoll ist es einfach für jemanden, auf meinen Fehler hinzuweisen, oder wenn das überhaupt möglich ist.getattr und setattr auf verschachtelten Objekten?
Ich habe ein Objekt, das mehrere Objekte als Eigenschaften hat. Ich möchte dynamisch in der Lage sein, um die Eigenschaften dieser Objekte festgelegt wie folgt:
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__
Die Ausgabe lautet:
{ ‚Haustier‘: < Haupt .pet Objekt bei 0x10c5ec050>, ‚Wohnort‘ : < Haupt .Residence Objekt auf 0x10c5ec0d0>, 'pet.name': 'Sparky', 'residence.type': 'Apartment'}
Wie Sie, anstatt den Namen Attribut sehen können, auf die gesetzt pet-Objekt der Person, ein neues Attribut "pet.name" ist crea ted.
Ich kann person.pet nicht auf setattr setzen, weil andere untergeordnete Objekte mit der gleichen Methode gesetzt werden, die einen Text analysiert und die Objektattribute ausfüllt, wenn/wenn ein relevanter Schlüssel gefunden wird.
Gibt es eine einfache/eingebaute Möglichkeit, dies zu erreichen?
Oder vielleicht muss ich eine rekursive Funktion schreiben, um die Zeichenfolge zu analysieren und Getattr mehrere Male aufrufen, bis das erforderliche Kindobjekt gefunden wird, und dann Setattr für dieses gefundene Objekt aufrufen?
Vielen Dank!
Wow, das war etwas, was ich nicht wusste. –
Vielen Dank für die Antwort! Das ist cool, ich liebe, wie Sie in 5 Zeilen tun können, was mich 30 dauerte. Sehr saubere und prägnante Lösung! – TPB
Schöne Antwort! –