码迷,mamicode.com
首页 > 编程语言 > 详细

python - getattr 与 getattribute 机制

时间:2018-10-14 00:29:33      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:div   style   one   nec   找不到类   item   color   ror   pytho   

#__getattribute__

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

    def __getattr__(self, item):
        return "找不到属性,触发getattr!"


    def __getattribute__(self, item):
        print("测试 getattribute")

        # 步骤三
        # super().__getattribute__(item)

        # 步骤四
        raise AttributeError("抛出异常....")

XXX = Foo("Anec")

# 步骤一 直接运行
# 步骤二 注释__getattribute__
# 步骤三 __getattribute__ 继承super()执行
# 步骤四 在__getattribute__ 加上raise语句


#类中已有的属性:
# 1.由测试可知,能找到类属性将执行__getattribute__内置方法(类属性并未显示)
# 2.注释__getattribute__ 将正常显示类属性
# 3.返回为None
# 4.直接触发getattr方法,没有返回类属性
print(XXX.name)

#类中不存在的属性:
# 1.由测试可知,找不到类属性也将执行__getattribute__内置方法.
# 2.注释 __getattribute__ 将直接触发 getattr 方法
# 3.触发 getattr 方法
# 4.直接触发getattr方法,没有返回类属性
print(XXX.name2)

#__getattribute__
#工作机制,在访问属性的时候,不管有没有类属性,都会执行__getattribute__
#当__getattribute__有raise触发报错时,会接着触发getattr

 

python - getattr 与 getattribute 机制

标签:div   style   one   nec   找不到类   item   color   ror   pytho   

原文地址:https://www.cnblogs.com/Anec/p/9784580.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!