class Make:
def __getattr__(self, name):
self.__dict__[name] = Make()
return self.__dict__[name]
make = Make()
make.a.dot.separated.name = 666
make.anything.i.want = 777
print make.a.dot.separated.name
print make.anything.i.want
A special method __getattr__is called when the named value is not found. The line make.anything.i.wantended up making the equivalent:
m1 = make.anything # calls make.__getattr__("anything")
m2 = m1.i # calls m1.__getattr__("i")
m2.want = 777
__getattr__ Make , . , .
object.__getattr__(self, name)
, (.. self). name . () AttributeError.
, , __getattr__() . ( __getattr__() __setattr__().) , __getattr__() . , , ( ). __getattribute__() , .
object.__setattr__(self, name, value)
. (.. ). name - name , value - , .
__setattr__() , self.name = value - . , , self.__dict__[name] = value. , , object.__setattr__(self, name, value).