zoukankan      html  css  js  c++  java
  • python

    #__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
  • 相关阅读:
    hdu5784 极角排序+two point
    极角排序理解
    计算多边形的面积模板
    18年CUG校赛--恶魔的序列
    二分图匹配模板
    POJ 2342 Anniversary party
    蓝桥杯真题-小计算器
    第八届蓝桥杯省赛真题题解
    Django具体操作(四)
    网络爬虫(三)
  • 原文地址:https://www.cnblogs.com/Anec/p/9784580.html
Copyright © 2011-2022 走看看