在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 = a116 self.a2 = a217 18 def __call__(self, *args, **kwargs):19 print(1111)20 21 def __getitem__(self, item):22 print(item)23 return 824 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.a133 34 def __enter__(self):35 print('进入文件')36 return 99937 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'] = 12351 # 5.del 对象['xxxx'] 自动执行 __delitem__52 del obj['uuu']53 # 6.对象+对象 自动执行 __add__54 obj1 = Foo(1, 2)55 obj2 = Foo(3, 4)56 ret = obj1 + obj257 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