python中的属性管理由__dict__存储

__getattr____getattribute__

区别

__getattribute__只有新式类才生效,继承自object的类

__setattr__

每当属性被赋值的时候, __setattr__() 会被调用,所以有可能造成递归调用,比如:

1
2
3
4
5
6
#wrong
def __setattr__(self, name, value):
self.name = value
#right
def __setattr__(self, name, value):
self.__dict__[name] = value

一般来说都是在获取某个属性的时候做特殊处理或限制,设置属性时很少会涉及。