如何创建 "list" 类的子类,该子类在实例化时自行排序?



我想创建SortedListlist类的一个子类。
我希望SortedList实例化时自行排序

例如,使用此输入:

x = SortedList([1, 9, 7])
print(x)

我想要这个输出:

[1, 7, 9]

我是个乞丐。我知道可能有一些函数或数据类型更适合此,但我想练习我的 dunder 方法和 OOP 技能。

我试过这个,但它不起作用:

class SortedList(list):
    def __init__(self, values):
        super().__init__()
        self.values = values
        self.sort(self.values)

我有点困惑。

我以前用过super(),但我在我创建的超类中使用它,我知道属性。这一次,我必须将super()与内置类一起使用,所以我不确定要编写哪些属性。

请帮忙。
谢谢!

使用这个:

class SortedList(list):
    def __init__(self, values):
        super().__init__(sorted(values))
x = SortedList([1, 9, 7])
print(x)

list可以从可迭代对象构建,例如从数组构建。因此,我们可以将值的排序副本传递给超级构造函数,并让它初始化其属性(我们不必知道list的内部结构(。

请注意,如果你真的想实现一个排序列表,你必须继续覆盖其他方法!

您的代码将出现错误:TypeError: sort() takes no positional arguments .

self.sort有问题,排序属于list,而不是listSortedList的实例,self这里是SortedList的实例。因此,使用 list.sort(self.values)self.values.sort() 而不是 self.sort(self.values) 将起作用。

更新:为了更清楚,a = [1, 2, 3]a.sort() equals to list.sort(a) 。 实际上,sort不属于列表的实例。

对不起,我的英语很差。我觉得我表达得不是很好...

再次更新:是的,我可以用代码显示信息:

In [18]: a = [1, 2, 3]
In [19]: a.sort
Out[19]: <function list.sort(*, key=None, reverse=False)>
# but 
In [20]: a.sort is list.sort
Out[20]: False
# I think python makes some trick here...
# so...
In [21]: list.sort
Out[21]: <method 'sort' of 'list' objects>

无论如何,我希望你能理解为什么self.sort(self.values)不能工作,用我不是很有表现力的解释。

似乎我忘了显示可以工作的代码...

根据我的解释:

class SortedList(list):
    def __init__(self, values):
        super().__init__(values)
        super().sort()
x = SortedList([1, 3, 2])
print(x)

最新更新