【发布时间】:2015-03-24 22:46:08
【问题描述】:
我正在尝试创建一个自定义列表子类,它继承列表类的所有方面,除了它的append 方法在每次添加新对象时对列表进行排序。
到目前为止,我有这样的事情:
class CommentList(list):
def append(self, other):
return self.data_list.append(other)
我不确定如何为此引入排序功能以及如何改进上述方法。
【问题讨论】:
-
这里很好地解释了为什么你不应该从列表中继承 stackoverflow.com/questions/21692193/why-not-inherit-from-listt
-
@Andrey:这是一个 C# 解释。此外,我不清楚接受的答案是否适用于 OP 的问题。无论如何,告诉 OP 从
collections.abc.MutableSequence继承而不是仅仅说“不要那样做”会更有用。 -
@Andrey,这种情况与那种情况不符。这里 OP 希望扩展 List 的功能以使其保持排序;结果仍然是一个列表。对于这种情况,List 是否是正确的基类是另一个问题,Kevin 可能是对的(尽管我不熟悉他提到的类)
-
@Kevin 的解释是抽象的,对 C# 的细节很少。从 list/List
/MutableSequence 继承业务逻辑类通常是个坏主意。仅当您要实现某种新型容器时才有意义。组合优于继承。 -
此外,从MutableSequence继承业务逻辑类是重点;它是 IList 的 Python 等价物,除了它具有大多数方法的默认实现。