zoukankan      html  css  js  c++  java
  • 复习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__  对象加括号    就调用此方法

  • 相关阅读:
    loj 6035 「雅礼集训 2017 Day4」洗衣服
    BZOJ 3251 树上三角形
    UwrhrQNgRh
    百度之星2018资格赛1002题解
    [CF-676B]PYRAMID OF GLASSES
    【CF-371C】Hamburgers
    洛谷P1012拼数——字符串排序
    位运算详解及应用
    NOIP 2014 Day2 T1 无线网络发射器
    写代码要注意的几点(2)
  • 原文地址:https://www.cnblogs.com/ch2020/p/12454821.html
Copyright © 2011-2022 走看看