在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
来源:https://www.cnblogs.com/cbslock/p/11220034.html