python数列类基类_如何创建⼀个可以像数组⼀样使⽤的
Pythonarraylike对象?
我想您是在问如何创建⼀个序列类型,⼀个可以⽤[]索引其实例的类型,就像⼀个列表。在
python 定义数组
这样做的关键是实现⼀个或多个特殊⽅法,如⽂档中的Emulating container types所述。在
特别是,为my_obj[1]调⽤的特殊⽅法是^{}。在
对于⼀个⾮常简单的⽰例,让我们创建⼀个类似于所有⼩写英⽂字母的列表:class Letters:
def __getitem__(self, index):
return string.ascii_lowercase[index]
现在:
^{pr2}$
然⽽,这并不是⼀个完整的序列。例如:>>> len(letters)
TypeError: object of type 'Letters' has no len()
>>> reversed(letters)
TypeError: object of type 'Letters' has no len()
>>> isinstance(letters, collections.abc.Sequence)
False
如果您想实现⼀个完整的序列,^{}模块很有⽤,因为它提供的所有抽象基类也是mixin类,它们为您填充了⼤部分实现。例如,如果我们继承Sequence,我们只需定义__getitem__和{},它将免费为我们提供__contains__,__iter__,__reversed__,index,和{}的实现:class Letters(collections.abc.Sequence):
def __getitem__(self, index):
return string.ascii_lowercase[index]
def __len__(self):
return 26
现在,在list,tuple,和{}上⼯作的所有东西都在{}上⼯作:>>> letters = Letters()
>>> len(letters)
26
>>> reversed(letters)
>>> print(*reversed(letters))
z y x w v u t s r q p o n m l k j i h g f e d c b a
>>> letters.index('s')
10
>>> isinstance(letters, collections.abc.Sequence)
True

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。