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
  • 相关阅读:
    Spring Boot 搭建项目阶段Group和Artifact的含义
    设置Mysql数据库账号密码以及时区
    反射
    线程与进程
    网络编程
    队列和栈
    linux下的mysql
    积累的关于linux的安装卸载软件基本命令
    各种url编码
    解决浏览器传值乱码
  • 原文地址:https://www.cnblogs.com/Anec/p/9784580.html
Copyright © 2011-2022 走看看