19面向对象--特殊成员

在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

 

posted @ 2019-07-21 02:54  John.Liu-  阅读(183)  评论(0编辑  收藏  举报