zoukankan      html  css  js  c++  java
  • Python概念-Attr系列(林海峰教的)

    这个Attr系列是egon老师自创的,个人还是可以接受这种文化底蕴的,所以直接拿来用,也是毫无违和感的

    所谓Attr系列,其实是__setattr__,__delattr__,__getattr__ 三个函数,从名字中可以看出来这是一套设置,删除,查询的函数,那我们来一个一个的看:

    __setattr__(self):当对类中的某个属性进行"赋值"时触发的函数

    代码示例:

     1 class Teacher:
     2     def __init__(self):
     3         self.name = "Egon"
     4     def __setattr__(self, key, value):#当self.name被赋值时出发函数__setattr__
     5         self.__dict__[key] = value 
           #将name:egon存放在self的命名空间中也就是在字典中添加一个键值对(key:value) 6 print(key,"已被赋值:",value) 7 8 te = Teacher()#实例化Teacher类,此时已经出发了self.name的赋值 9 10 #name 已被赋值: Egon

    __delattr__(self):当对类中的某个属性进行"删除"时触发的函数

    代码示例:

    class Teacher:
        def __init__(self):
            self.name = "Egon"
        def __delattr__(self, item):#当self.name被赋值时出发函数__delattr__
            self.__dict__.pop(item)#将self命名空间中name键连同value一起删除
            print(item,"已被删除")
    
    te = Teacher()
    del te.name#触发了__delattr__()的方法执行

    __getattr__(self):当调用的名字,"没有在实例化对象或类中出现时",触发的函数

    代码示例:一定要注意,这里是没有找到名字的时候触发

    1 class Teacher:
    2     def __init__(self):
    3         self.name = "Egon"
    4     def __getattr__(self, item):#没有找到属性或方法时,执行次函数
    5         print("没有",item,"属性")
    6 
    7 te = Teacher()
    8 te.sbegon#很明显Teacher中和te中都是没有sbegon这个属性或方法的,所以触发__getatter__()方法

    以上就是Attr系列的小总结

  • 相关阅读:
    【Rxjs】Rxjs预习
    【vscode】插件开发--vs控制在浏览器打开
    Unexpected directive 'XXX' imported by the module 'AppMoode'
    【vscode插件开发】vscode->angular组件跳转、数据监听流程
    pip 错误Requested **, but installing version **
    Temporary failure in name resolution
    python yield
    Python partial函数
    excel的导入导出
    Apache2.4 + Tomcat7 负载均衡配置
  • 原文地址:https://www.cnblogs.com/DragonFire/p/6757604.html
Copyright © 2011-2022 走看看