面向对象--特殊成员
1.类的特殊成员之call
1 class SpecialMembers: 2 #类的构造方法 3 def __init__(self): 4 print("构造了一个方法") 5 6 def __call__(self): 7 print("构造了一个对象") 8 9 #创建一个对象,并执行类的构造方法 10 obj = SpecialMembers() 11 #执行对象的构造方法 12 obj() 13 #先执行类的构造方法,然后再执行对象的构造方法 14 SpecialMembers()()
2.类的特殊成员之getitem,setitem,delitem
1 class SpecialMembers: 2 #当执行obj['value']的时候就会自动执行__getitem__方法,并且把对象括号内的值当做__getitem__的值 3 def __getitem__(self,item): 4 print(item) 5 def __setitem__(self,key,value): 6 print(key,value) 7 def __delitem__(self,key): 8 print(key) 9 10 #创建一个对象 11 obj = SpecialMembers() 12 #自动执行__getitem__方法 13 obj['value'] 14 #自动执行__setitem__方法 15 obj['k1'] = 'values' 16 #自动执行__delitem__方法 17 del obj['key']
3.类的特殊成员之dict
获取类或对象中的所有成员
1 class SpecialMembers: 2 """ 3 类的注释 4 """ 5 def __init__(self,name,age): 6 self.name = 'abc' 7 self.age = 18 8 #获取类中的成员 9 print(SpecialMembers.__dict__) 10 #创建一个对象 11 obj = SpecialMembers() 12 #获取对象中的成员 13 print(obj.__dict__)#以字典的形式输出
4.类的特殊成员之iter
1 class SpecialMembers: 2 def __iter__(self): 3 yield 1 4 yield 2 5 yield 3 6 #创建一个对象 7 obj = SpecialMembers() 8 #如果执行for循环对象时,会自动执行对象的__iter__方法,此时的__iter__就是一个生成器 9 for i in obj: 10 print(i)
5.类的特殊成员之add
1 class SpecialMembers: 2 def __init__(self,a1,a2): 3 self.a1 = a1 4 self.a2 = a2 5 def __add__(self,other): 6 return self.a1 + other.a2 7 8 obj1 = SpecialMembers(1,2) 9 obj2 = SpecialMembers(3,4) 10 print(obj1 + obj2)#5
6.真正的构造方法
1 class Foo: 2 def __init__(self,a1,a2):#初始化方法 3 """ 4 为空对象进行数据初始化 5 """ 6 self.a1 = a1 7 self.s2 = a2 8 9 def __new__(cls,*args,**kwargs): 10 """ 11 创建一个空对象 12 """ 13 return object.__new__(cls)#python内部创建一个当前类的对象 14 15 obj = Foo(1,2) 16 print(obj)