类中的特殊成员知识

 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)

 

posted @ 2018-06-27 22:21  xiaodingzi  阅读(122)  评论(0编辑  收藏  举报