У меня есть объект (Person
), который имеет несколько подобъектов (Pet, Residence
) в качестве свойств. Я хочу иметь возможность динамически устанавливать свойства этих подобъектов, например, так:
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__
В настоящее время я получаю неправильный вывод: {'pet': <__main__.Pet object at 0x10c5ec050>, 'residence': <__main__.Residence object at 0x10c5ec0d0>, 'pet.name': 'Sparky', 'residence.type': 'Apartment'}
Как видите, вместо установки атрибута name
в подобъекте Pet
в Person
в Person
создается новый атрибут pet.name
.
Я не могу указать от
person.pet
доsetattr()
, потому что разные подобъекты будут установлены одним и тем же методом, который анализирует некоторый текст и заполняет атрибуты объекта, если/когда найден соответствующий ключ.Есть ли простой/встроенный способ сделать это?
Или, возможно, мне нужно написать рекурсивную функцию для анализа строки и вызова
getattr()
несколько раз, пока не будет найден нужный подобъект, а затем вызватьsetattr()
для этого найденного подобъекта?