Python學習 定製序列

2021-09-10 09:42:55 字數 1458 閱讀 8812

要想成功實現容器的定製,需要先明白協議。

協議類似其他程式語言中的介面,規定了哪些方法必須要定義。

關於定製容器的一些協議:

像序列型別(如列表、元組、字串)或者對映型別(字典)都是屬於容器型別

如果希望定製的容器是不可變的話,只需要定義__len__()__getitem__()方法

如果希望定製的容器是可變的話,除了定義__len__()__getitem__()方法還需要定義__setitem__()__delitem__()兩個方法

魔法方法

含義__len__(self)定義當被len()函式呼叫時的行為(返回容器中元素的個數)

__getitem__(self, item)定義獲取容器中指定元素的行為,相當於self[key]

__setitem__(self, key, value)定義設定容器中指定元素的行為,相當於self[key]=value

__delitem__(self, key)定義刪除容器中指定元素的行為,相當於del self[key]

__iter__(self)定義當迭代容器中的元素的行為

__reversed__(self)定義當被reversed()函式呼叫時的行為

__contains__(self, item)定義當使用成員測試運算子(in或not in)時的行為

示例:

class

countlist

:def

__init__

(self,

*args)

:# 列表推導式

self.values =

[x for x in args]

# self.valus = list(args)

self.count =

.fromkeys(

range

(len

(self.values)),

0)# 使用陣列下標做字典的鍵,注意不能用元素作為字典的鍵

# 因為列表不同的下標可能有值一樣的元素,但字典不能有兩個相同的鍵

Python 定製序列

1 python中的三大容器 列表list,元組tuple,字串string 2 python允許我們定製乙個不可變的容器,如string,中就不能有修改容器的資料方法,如 setitem delitem 3 如果希望定製的容器支援reversed 內建函式,則容器中需定義 reversed 方法,...

學習。。。python定製方法

class chain object def init self,path self.path path def getattr self,path return chain s s self.path,path def call self,path return chain s s self.pa...

學習定義與宣告

定義 與 宣告 c primer 第四版 2.3.5節中這麼說到 1 變數定義 用於為變數分配儲存空間,還可為變數指定初始值。程式中,變數有且僅有乙個定義。2 變數宣告 用於向程式表明變數的型別和名字。3 定義也是宣告 當定義變數時我們宣告了它的型別和名字。4 extern關鍵字 通過使用exter...