想要實現乙個自定義類,該類模仿普通的內建容器型別(例如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都是定義的列舉型別,中的內...