#!coding:utf-8classPerson (object):def __init__(self,id):#to define a property named IDSelf.id=IDdef __getattr__(self,attr):#__getattr__ used to overload an object instance '. ' operator, #if the property called by the. Operator is present, return the property directly; otherwise call __getattr__ to return Print 'In __getattr__' ifattr=='Name': return 'My name is Hello world' Else: Raiseattributeerror,attrdef __setattr__(self,attr,value):ifattr=='Name': #Note that this time cannot be directly assigned to a property, or it is a dead loop.Self.__dict__[attr]=valueElse: Raiseattributeerror,attr+'Not find'if __name__=='__main__': P=person ('007') Printp.idPrintP.name#__getattr__ is called here because the instance does not register the name attribute. P.a=1#sets an unknown property, which throws an exception.
Python---__getattr__\__setattr_ overloaded '. ' Operation