实例List化
實現了__iter__()的實例雖能用于for循環,看似像list,但并不能將其當做list來使用,比如,Fib()[5]還是報錯
可通過實現__getitem__()方法,;來實現讓實例像list那樣按照下標取出元素
實現按下標取元素
class Fib(object):def __getitem__(self, n):a, b = 1, 1for x in range(n):a, b = b, a + breturn af = Fib()f[0] #輸出:1f[1] #輸出:1f[2] #輸出:2f[3] #輸出:3f[10] #輸出:89f[100] #輸出:573147844013817084101?
實現切片功能
__getitem__()傳入的參數可能是一個int,也可能是一個切片對象slice,因此需要做判斷
如果把對象看成dict,__getitem__()的參數也可能是一個可以作key的object,例如str
?
實現元素的設定與刪除
與之對應的還有__setitem__()方法和__delitem__()方法,分別用于為某個元素設值和刪除某個元素
總之,通過上面的方法,可自定義的類表現得和Python自帶的list、tuple、dict沒什么區別,這完全歸功于動態語言的"鴨子類型",不需要強制繼承某個接口
?
轉載于:https://www.cnblogs.com/shiliye/p/10983966.html
總結
- 上一篇: python学习—python中的引用本
- 下一篇: 802.1X基本配置