类中的特殊成员知识
1 # 什么是特殊成员呢?有哪些特殊成员呢? 2 # 见下方所示: 3 # __init__ 在创建对象的时候自动调用该方法 4 # __call__ 5 class foo: 6 7 def __init__(self): 8 print("init") 9 def __call__(self, *args, **kwargs): 10 print("call") 11 def __int__(self): 12 return 123 13 def __str__(self): 14 return "wo shi str" 15 16 obj = foo() #实例化对象的时候自动调用 init 方法,实例几次调用几次 17 obj() #类名()() 或者对象() 执行的时候 ,自从调用call 方法 18 print(int(obj)) #当执行int()方法的时候自动调用__int__方法 括号中传的参数是对象 19 print(str(obj)) #当执行str()方法的时候自动调用__str__方法 括号中传的参数是对象
1 # __add__方法 2 # 析构方法 __del__ 是什么意思? 3 # 该方法是在python要销毁该对象的时候促发该方法去执行。 4 # __dict__ 是用啦干什么的呢? 5 # 是用来获取对象或者类中的所有封装的成员并返回一个字典__dict__ 6 # 调用列表的时候自动调用__getitem__ __setitem__ __delitem__ 这个 是很重要的! 7 8 9 class foo: 10 def __init__(self,age): 11 self.age = age 12 def __add__(self, other): 13 return self.age + other.age 14 15 # 根据索引值获取值 16 def __getitem__(self, item): 17 return item+10 18 # 根据索引值设置值 19 def __setitem__(self, key, value): 20 print(key,value) 21 # 删除列表值 22 def __delitem__(self, key): 23 print(key) 24 25 obj1 = foo(18) 26 obj2 = foo(20) 27 print(obj1+obj2) #38 28 print(obj1.__dict__) # {'age': 18} 29 print(foo.__dict__) # 这个把不可见的成员也打印出来了 30 31 # 是对象通过索引来进行取值 32 li =foo(39) 33 print(li[29]) # 29就是上面的item参数 # 39 34 li[90] = "我尼玛" # 90 我尼玛 35 del li[100] # 100
1 # 列表类型的切片是如何调用的呢? 2 # 也是通过__getitem__来实现的 3 # 那么是如何实现的呢? 4 # 通过__getitem__当中的slice类来实现的 5 # 此外,切片类还可以实现 item.start item.stop item.step 这些方法的调用 6 7 # 迭代对象的实现 __iter__ 8 # 在类中定义了__iter__这个方法之后,该类的实现对象就变成了可迭代对象 9 # 可迭代对象使用for 循环遍历元素的时候,需要将可迭代对象使用iter()转化为迭代器才可以遍历 10 # 实现方法如下: 11 class foo: 12 13 # 处理切片 14 def __getitem__(self, item): 15 16 print(item,type(item)) 17 18 if type(item) == slice: 19 print(item.start) 20 print(item.stop) 21 print(item.step) 22 print("调用者希望做切片处理") 23 else: 24 25 print("调用者希望做普通类型的工作") 26 27 def __iter__(self): 28 29 #return [1,23,4,5,10] 30 return iter([1,23,4,5,10]) 31 32 33 # 调用下列表触发这个方法来查看下 34 35 li = foo() 36 li[10] #10 <class 'int'> 37 li[2:5:10] #slice(2, 5, 10) <class 'slice'> 38 39 # 可迭代器对象的实现 40 it = foo() 41 for i in it: 42 43 print(i)