實現自定義容器型別

2021-10-04 00:21:52 字數 1431 閱讀 4610

想要實現乙個自定義類,該類模仿普通的內建容器型別(例如list或dict)的行為。 但是,不確定要實現哪種方法。

collections.abc模組定義了各種抽象基類,這些基類在實現自定義容器類時非常有用。自定義類一般通過繼承該模組的對應基類,然後實現所需要的類方法。如下:

from collections.abc import iterable

class a(iterable):

pass

>>> a = a()

traceback (most recent call last):

file "", line 1, in typeerror: can't instantiate abstract class a with abstract methods __iter__

>>>

簡單的繼承基類卻不實現基類中定義的相應方法,則子類仍為抽象型別,無法進行初始化例項物件操作。因此,a類必須實現iterable的__iter__方法。

如果想知道基類的哪些方法需要被子類實現,可以直接對基類進行測試,如對基類進行例項初始化,檢視異常資訊,如下:

>>> from collections.abc import sequence

>>> sequence()

traceback (most recent call last):

file "", line 1, in typeerror: can't instantiate abstract class sequence with abstract methods __getitem__, __len__

>>>

由上可知,如果某個子類繼承自sequence,則需要實現其__getitem__和__len__方法。

下面的示例可以解釋這種機制:

from collections.abc import sequence

from bisect

class sorteditems(sequence):

def __init__(self, initial=none):

self._items = sorted(initial) if initial is not none else

# required sequence methods

def __getitem__(self, index):

return self._items[index]

def __len__(self):

return len(self._items)

# method for adding an item in the right location

def add(self, item):

bisect.insort(self._items, item)

自定義型別

typedef型別 typedef 已有型別 新建型別 示例 typedef double area,volume typedef int number number i1 area a enum enum 列舉型別名 enum week 預設sun 0,可以比較 如果修改必須形如enum week...

自定義型別

下面列舉幾種c語言中常用的自定義資料型別 1.結構體型別 當描述乙個整型變數時,可以用int,描述字元型變數時,可以用char,但要描述乙個學生時,因為這個學生包含的資訊很多,比如姓名,性別,年齡等,不能通過單一的型別來描述,所以,這裡引入結構體型別,將某個事物的共有屬性集合在一起,宣告乙個結構體型...

自定義型別

列舉從字面意思理解就是將可能取的值一一枚舉出來,列舉型別沒有成員 可言,裡邊存放的是可能取值。列舉型別的定義 enum day enum color printf d n red printf d n green printf d n blue 執行結果 day和color都是定義的列舉型別,中的內...