• 复习1


    #自省、反射

    hasattr(obj,'属性')  # 判断obj.属性是否存在

    getattr(obj,'属性')  获取obj.属性     不存在则报错

    getattr(obj,'属性','默认值')   获取obj.属性的值,不存在则返回默认值

    setattr(obj,'属性','属性的值')   设置属性obj.属性=属性值

    delattr(obj,'属性')   删除obj.属性

    #  __getattr__、__setattr__、__delattr__   这几个和上面的没有任何关系,这几个是当寻找属性、设置和删除属性时才会触发。   

    __getattr__   当obj.属性    不存在时触发

    __setattr__    当设置obj.属性时    会触发

    __delattr__    当删除obj.属性时    会触发

    #  __getitem__、__setitem__、__delitem__

    __getitem__   obj['key']   获取时触发

    __setitem__    obj[key] = value    时触发

    __delitem__    del  obj[key]    时触发

    # __get__、__set__、__delete__描述符

    描述符就是一个新式类,这个新式类至少要实现上述三个方法中的一个

     1 class 描述符:
     2     def __get__(self, instance, owner):
     3         pass
     4     def __set__(self, instance, value):
     5         pass
     6     def __delete__(self, instance):
     7         pass
     8 class 类:
     9     name = 描述符()
    10 
    11 obj = 类()
    12 obj.name     #  触发描述符  get方法
    13 obj.name = 'egon '  # 触发set方法
    14 del obj.name     # 触发delete方法

    # __del__  析构方法

    垃圾回收后会触发此方法

    #  __getattribute__   调用类属性时才会触发

    不管属性存在与否都会触发

    只有当在__getattribute__ 抛出Attriibute异常时,才会触发__getattr__ 方法 

    #  __str__   方法   可以显示打印对象(实例),可以自定义信息 

     1 class Foo:
     2     def __str__(self):
     3         return '这是析构函数的__str__方法'
     4     def __repr__(self):
     5         return '这是析构函数的__repr__方法'
     6 
     7 f = Foo()
     8 print(f)
     9 输出:
    10 这是析构函数的__str__方法

    # __call__  对象加括号    就调用此方法

  • 相关阅读:
    反射学习(三)--------利用反射调用方法
    list实体数据分组
    利用dockerfile制作基于centos7的lnmp镜像(亲测,详细版)
    基于数组的shell脚本编写
    Ansible中文权威指南
    几种方法来实现scp拷贝时无需输入密码
    Java 中&&和&的区别
    常用javaScript小常识
    mysql数据库函数
    Hidden的应用
  • 原文地址:https://www.cnblogs.com/ch2020/p/12454821.html
Copyright © 2020-2023  润新知