1.__getattr__
如果某个类定义了__getattr__,那么当该类的实例字典中找不到所要查询的属性时,便会调用该方法。
class People:
def __init__(self):
self.name = 'John'
def __getattr__(self, item):
value = 'The value is % s' % item
setattr(self, item, value)
return value
data = People()
print(data.__dict__)
print(data.age)
print(data.__dict__)
{'name': 'John'}
The value is age
{'name': 'John', 'age': 'The value is age'}
然后给people类添加新功能
class Chinese(People):
def __getattr__(self, item):
print('__getattr__ is %s' % item)
return super().__getattr__(item)
ch = Chinese()
print(ch.age)
print(ch.age)
__getattr__ is age
The value is age
The value is age
我们使用super().__getattr__()是为了避免无限递归.