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笔记61 - __getattr__ 属性查找学习与使用
python自定义属性访问__setattr__, __getattr__, __setattribute__