Python-类属性查询协议-__getattr__ __getattribute__

Posted 北门吹雪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python-类属性查询协议-__getattr__ __getattribute__相关的知识,希望对你有一定的参考价值。

__getattr__  

  查找不到类属性的时候调用

class BeiMenChuiXue:
    def __init__(self, name):
        self.name = name

    def __getattr__(self, item):
        print("%s not find", item)
        raise Exception("实例方法没有找到")


if __name__ == ‘__main__‘:
    bei_men_chui_xue = BeiMenChuiXue("北门吹雪")
    print(bei_men_chui_xue.name)
    # 没有这个属性
    print(bei_men_chui_xue.hello)

  

__getattribute__

  无条件进入,无论是查找属性是否存在,能不重写则不去重写

class BeiMenChuiXue:
    def __init__(self, name):
        self.name = name

    def __getattribute__(self, item):
        print("%s  find" % item)


if __name__ == ‘__main__‘:
    bei_men_chui_xue = BeiMenChuiXue("北门吹雪")
    # 能找到,会发现其实是__getattribute__的返回值
    print(bei_men_chui_xue.name)
    # 没有这个属性
    print(bei_men_chui_xue.hello)

  

以上是关于Python-类属性查询协议-__getattr__ __getattribute__的主要内容,如果未能解决你的问题,请参考以下文章

python中__getattr__和__getattribute__区别

python 类中__getattr__的使用

python笔记61 - __getattr__ 属性查找学习与使用

python自定义属性访问__setattr__, __getattr__, __setattribute__

python之 __getattr____getattr____getitem____setitem__ 使用

Python——管理属性