from datetime import date """ __getattr__ : 在查找不到对象的属性时调用 __getattribute__ : 在查找属性之前调用(一般都不要覆写) 所以,访问的属性的调用顺序是: __getattribute__ > 对象属性 > __getattr__ """ class User: def __init__(self, name, birthday=None): self.name = name self.birthday = birthday def __getattr__(self, item): '''可以在这里进行一些简单的操作''' return "Not Found" def __getattribute__(self, item): '''这是所有属性访问的入口, 如果return "aa" , 那么访问user对象的任何属性都会返回aa ''' pass if __name__ == '__main__': user = User('小明') print(user.name) # 小明 , 在user对象中可以找到name属性,所以不会进入到__getattr__方法 print(user.age) # Not Found , 在user对象中找不到age属性,所以会进入到__getattr__方法,然后返回一个Not Found
日拱一卒无有尽,功不唐捐终入海