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