首页 > 其他 > 详细

19面向对象--特殊成员

时间:2019-07-21 09:39:55      阅读:86      评论:0      收藏:0      [点我收藏+]

在python中,除了一些方法,属性之外,还有一些特殊成员

 1 class Foo(object):
 2 
 3     def __new__(cls, *args, **kwargs):
 4         """
 5         创建一个空对象
 6         :param args:
 7         :param kwargs:
 8         :return:
 9         """
10         print(2)
11         return object.__new__(cls)
12 
13     def __init__(self, a1, a2):
14         # 为一个空对象进行数据的初始化
15         self.a1 = a1
16         self.a2 = a2
17 
18     def __call__(self, *args, **kwargs):
19         print(1111)
20 
21     def __getitem__(self, item):
22         print(item)
23         return 8
24 
25     def __setitem__(self, key, value):
26         print(key, value, 1111111)
27 
28     def __delitem__(self, key):
29         print(key)
30 
31     def __add__(self, other):
32         return self.a1 + other.a1
33 
34     def __enter__(self):
35         print(进入文件)
36         return 999
37 
38     def __exit__(self, exc_type, exc_val, exc_tb):
39         print(222)
40 
41 
42 # 1.类名() 自动执行__init__
43 obj = Foo(1, 2)
44 # 2.对象() 自动执行__call__
45 obj()
46 # 3.对象[] 自动执行 __getitem__
47 ret = obj[语文]
48 print(ret)
49 # 4.对象[‘xxx‘]=123 自动执行 __setitem__  # 无返回值
50 obj[k1] = 123
51 # 5.del 对象[‘xxxx‘] 自动执行 __delitem__
52 del obj[uuu]
53 # 6.对象+对象   自动执行 __add__
54 obj1 = Foo(1, 2)
55 obj2 = Foo(3, 4)
56 ret = obj1 + obj2
57 print(ret)
58 # 7.with 对象
59 obj3 = Foo(1, 2)
60 with obj as f:
61     print(f)   # f就是enter的返回
62     print(内部代码)
63 # 8.真正的构造方法  __new__  在实例化一个对象时,首先执行的是new,其次才是init

 

19面向对象--特殊成员

原文:https://www.cnblogs.com/cbslock/p/11220034.html

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