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
to を指定することはできません。setattr()
これを達成するための簡単な/組み込みの方法はありますか?
または、文字列を解析し
getattr()
、必要なサブオブジェクトが見つかるまで複数回呼び出しsetattr()
てから、見つかったサブオブジェクトを呼び出す再帰関数を作成する必要があるのでしょうか?