首页 > 其他 > 详细

双下划线开头的attr方法

时间:2020-03-07 19:38:05      阅读:74      评论:0      收藏:0      [点我收藏+]
 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

 

双下划线开头的attr方法

原文:https://www.cnblogs.com/ch2020/p/12435941.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!