python的__getattr__、__getattribute__、__setattr__

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__()是为了避免无限递归.

猜你喜欢

转载自blog.csdn.net/yangjiajia123456/article/details/80559158