# 都只是语法,无特殊意义 class Foo(object):def __init__(self,a1,a2):self.a1 = a1self.a2 = a2def __call__(self,*args,**kwargs):print(11111,args,kwargs)return 123def __getitem__(self, item):print(item)return 8def __setitem__(self, key, value):print(key,value,111111111)def __delitem__(self, key):print(key)def __add__(self, other):return self.a1+ other.a2def __enter__(self):print('111')return 999def __exit__(self, exc_type, exc_val, exc_tb):print('222')# 1.类名() 自动执行 __init__ obj = Foo(1,2) # 2.对象() 自动执行 __call__ res=obj(6,4,2,k1=456) print(res) print("#"*20) # 3.对象[] 自动执行 __getitem__ ret= obj['yu'] print(ret) print("#"*20) # 4.对象['xx']=11 自动执行 __setitem__ obj['k1'] = 123 print("#"*20) # 5.del 对象[xx] 自动执行 __delitem__ del obj['aaa'] print("#"*20) # 6.对象+对象 自动执行 __add__ obj1 = Foo(1,2) obj2 = Foo(88,99) ret=obj2+obj1 print(ret) print("#"*20) # 7.with 对象 自动执行 __enter__ / __exit__ with obj as f:print(f)print('内部代码')
# 8.真正的构造方法 class Foo(object):def __init__(self, a1, a2): # 初始化方法"""为空对象进行数据初始化:param a1::param a2:"""print(1)self.a1 = a1self.a2 = a2def __new__(cls,*args,**kwargs): # 构造方法"""创建一个空对象:param args::param kwargs:"""print(2)v1=object.__new__(cls) # Python内部创建一个当前类的象(初创时内部是空的.)print(v1)return v1obj = Foo(1,2) print(obj)