类中的特殊成员知识
1 # 什么是特殊成員呢?有哪些特殊成員呢?
2 # 見下方所示:
3 # __init__ 在創(chuàng)建對象的時候自動調(diào)用該方法
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() #實例化對象的時候自動調(diào)用 init 方法,實例幾次調(diào)用幾次
17 obj() #類名()() 或者對象() 執(zhí)行的時候 ,自從調(diào)用call 方法
18 print(int(obj)) #當執(zhí)行int()方法的時候自動調(diào)用__int__方法 括號中傳的參數(shù)是對象
19 print(str(obj)) #當執(zhí)行str()方法的時候自動調(diào)用__str__方法 括號中傳的參數(shù)是對象 1 # __add__方法
2 # 析構(gòu)方法 __del__ 是什么意思?
3 # 該方法是在python要銷毀該對象的時候促發(fā)該方法去執(zhí)行。
4 # __dict__ 是用啦干什么的呢?
5 # 是用來獲取對象或者類中的所有封裝的成員并返回一個字典__dict__
6 # 調(diào)用列表的時候自動調(diào)用__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 # 根據(jù)索引值獲取值
16 def __getitem__(self, item):
17 return item+10
18 # 根據(jù)索引值設置值
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參數(shù) # 39
34 li[90] = "我尼瑪" # 90 我尼瑪
35 del li[100] # 100 1 # 列表類型的切片是如何調(diào)用的呢?
2 # 也是通過__getitem__來實現(xiàn)的
3 # 那么是如何實現(xiàn)的呢?
4 # 通過__getitem__當中的slice類來實現(xiàn)的
5 # 此外,切片類還可以實現(xiàn) item.start item.stop item.step 這些方法的調(diào)用
6
7 # 迭代對象的實現(xiàn) __iter__
8 # 在類中定義了__iter__這個方法之后,該類的實現(xiàn)對象就變成了可迭代對象
9 # 可迭代對象使用for 循環(huán)遍歷元素的時候,需要將可迭代對象使用iter()轉(zhuǎn)化為迭代器才可以遍歷
10 # 實現(xiàn)方法如下:
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("調(diào)用者希望做切片處理")
23 else:
24
25 print("調(diào)用者希望做普通類型的工作")
26
27 def __iter__(self):
28
29 #return [1,23,4,5,10]
30 return iter([1,23,4,5,10])
31
32
33 # 調(diào)用下列表觸發(fā)這個方法來查看下
34
35 li = foo()
36 li[10] #10 <class 'int'>
37 li[2:5:10] #slice(2, 5, 10) <class 'slice'>
38
39 # 可迭代器對象的實現(xiàn)
40 it = foo()
41 for i in it:
42
43 print(i)
?
轉(zhuǎn)載于:https://www.cnblogs.com/neilyoung22/p/9236280.html
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
- 上一篇: Angular JS - 9 - Sea
- 下一篇: SpringCloud2.0入门3-新的