zoukankan      html  css  js  c++  java
  • 双下划线开头的attr方法

     1 class Job:
     2     def __init__(self, name):
     3         self.name = name
     4 
     5     def __getattr__(self, item):  # 当调用的属性不存在的时候,就会触发此方法
     6         print('没有此属性')
     7 
     8     def __delattr__(self, item):  # 当删除属性时,会触发此方法
     9         print('删除方法__delattr__')
    10 
    11     def __setattr__(self, key, value):  # 只要有属性创建的时候就会触发此函数
    12         print('__setattr__执行')
    13         # self.key = value  # 出现递归
    14         self.__dict__[key] = value
    15 
    16 
    17 j1 = Job('小白')
    18 print(j1.__dict__)
    19 print(j1.name)
    20 print(j1.sd)
    21 j1.z = 2
    22 print(j1.__dict__)
    23 print(j1.name)
    24 输出:
    25 __setattr__执行
    26 {'name': '小白'}
    27 小白
    28 没有此属性
    29 None
    30 __setattr__执行
    31 {'name': '小白', 'z': 2}
    32 小白
     1 class Job:
     2     def __init__(self, name):
     3         self.name = name
     4 
     5     def __getattr__(self, item):  # 当调用的属性不存在的时候,就会触发此方法
     6         print('没有此属性')
     7 
     8     def __delattr__(self, item):  # 当删除属性时,会触发此方法
     9         print('删除方法__delattr__')
    10         self.__dict__.pop(item)
    11 
    12     def __setattr__(self, key, value):  # 只要有属性创建的时候就会触发此函数
    13         print('__setattr__执行')
    14         # self.key = value  # 出现递归
    15         self.__dict__[key] = value
    16 
    17 
    18 j1 = Job('小白')
    19 del j1.name
    20 print(j1.__dict__)
    21 print(j1.__dict__)
    22 print(j1.name)
    23 print(j1.sd)
    24 j1.z = 2
    25 print(j1.__dict__)
    26 print(j1.name)
    27 输出:
    28 __setattr__执行
    29 删除方法__delattr__
    30 {}
    31 {}
    32 没有此属性
    33 None
    34 没有此属性
    35 None
    36 __setattr__执行
    37 {'z': 2}
    38 没有此属性
    39 None
  • 相关阅读:
    产品经理之职责篇
    Scrum实践
    通用泛型存储接口的设计
    Jquery ajax执行顺序 返回自定义错误信息
    Js参数值中含有单引号或双引号解决办法
    Winform下的HTMLEditor引用Microsoft.mshtml的注意事项
    引用类型传参不加 ref 的注意事项
    List<T> 排序(Sort)查找(Find)功能的多种实现
    多线程三种传值方式
    SQL 存储过程传入多个ID
  • 原文地址:https://www.cnblogs.com/ch2020/p/12435941.html
Copyright © 2011-2022 走看看