子类Python列表以验证新项目


问题内容

我想要一个python列表,该列表在外部将其自身表示为其内部列表项的平均值,但在其他方面则表现为列表。TypeError如果添加了一个不能转换为浮点数的项目,它应该引发一个。

我所坚持的部分正在提高TypeError。应当提高了通过任何list方法,如添加无效项目.append.extend+=,由片设置,等等。

有没有办法拦截添加到列表中的新项目并对其进行验证?

我尝试重新验证其中的整个列表__getattribute__,但是当调用它时,我只能访问列表的旧版本,而且它甚至都没有被称为初始化,运算符+=或,如切片mylist[0] = 5

有任何想法吗?


问题答案:

继承自MutableSequence并实现其所需的方法以及仅属于Sequence范围之外的任何其他方法(例如此处运算符)。这将允许您在自动生成迭代器并包含功能的同时,更改类似列表功能的操作员操作。

如果您想检查切片,请isinstance(key, slice)在您的__getitem__(和/或__setitem__)方法中进行。请注意,单个索引(例如myList
[0])不是切片请求,而是单个索引和myList [:0]是实际的切片请求。