在嵌套的子对象/链式属性上使用getattr和setattr?
在嵌套的子对象/链式属性上使用getattr和setattr?
我有一个对象(`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'}`。
如你所见,我并没有设置`Person`的`Pet`子对象的`name`属性,而是在`Person`上创建了一个新的属性`pet.name`。
- 我不能将`person.pet`指定给`setattr()`,因为不同的子对象将通过相同的方法设置,该方法会解析一些文本,并在找到相关键时填充对象属性。
- 有没有一种简单/内置的方法来实现这个?
- 或者,也许我需要编写一个递归函数来解析字符串,并多次调用`getattr()`直到找到所需的子对象,然后在找到的子对象上调用`setattr()`?