#!coding:utf-8 class Person(object): def __init__(self,id): #定义一个名为ID的属性 self.ID=id def __getattr__(self,attr): #__getattr__用于重载对象实例的'.'操作符, #如果.操作符调用的属性存在就直接返回属性;不然就调用__getattr__来返回 print 'in __getattr__' if attr=='Name': return 'My name is hello world' else: raise AttributeError,attr def __setattr__(self,attr,value): if attr=='Name': #注意这个时间是不能对属性直接赋值的,要不然就是一个死循环了 self.__dict__[attr]=value else: raise AttributeError,attr+'not find' if __name__=='__main__': p=Person('007') print p.ID print p.Name #这里会调用__getattr__,因为实例并没有注册Name这个属性。 p.A=1 #设置一个未知属性,从而引发异常。