我有一个对象 ( 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
pet.name
Person
我无法指定
person.pet
,setattr()
因为不同的子对象将由相同的方法设置,如果/当找到相关键时,该方法会解析一些文本并填写对象属性。有没有一种简单/内置的方法来实现这一点?
或者我可能需要编写一个递归函数来解析字符串并
getattr()
多次调用,直到找到必要的子对象,然后调用setattr()
找到的子对象?