如何创建 "list" class 的 Subclass,它在实例化时自行排序?
How do I create a Subclass of the "list" class, that sorts itself upon instantiation?
我想创建 SortedList
,list
class 的子class。
我希望 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()
,但我把它和我做的superclasses一起使用,我知道它的属性。
这次要用内置的classsuper()
,不知道要写什么属性。
请帮忙。
谢谢!
使用这个:
class SortedList(list):
def __init__(self, values):
super().__init__(sorted(values))
x = SortedList([1, 9, 7])
print(x)
A list
可以从可迭代对象构建,例如从数组构建。因此,我们可以将值的排序副本传递给超级构造函数,并让它初始化其属性(我们不必知道 list
的内部结构)。
请注意,如果您真的想实现 SortedList,则必须继续覆盖其他方法!
您的代码将有错误:TypeError: sort() takes no positional arguments
.
self.sort
有问题,排序属于 list
,不是 list
或 SortedList
的实例,self
这里是 [=16= 的实例].因此,使用 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)
我想创建 SortedList
,list
class 的子class。
我希望 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()
,但我把它和我做的superclasses一起使用,我知道它的属性。
这次要用内置的classsuper()
,不知道要写什么属性。
请帮忙。
谢谢!
使用这个:
class SortedList(list):
def __init__(self, values):
super().__init__(sorted(values))
x = SortedList([1, 9, 7])
print(x)
A list
可以从可迭代对象构建,例如从数组构建。因此,我们可以将值的排序副本传递给超级构造函数,并让它初始化其属性(我们不必知道 list
的内部结构)。
请注意,如果您真的想实现 SortedList,则必须继续覆盖其他方法!
您的代码将有错误:TypeError: sort() takes no positional arguments
.
self.sort
有问题,排序属于 list
,不是 list
或 SortedList
的实例,self
这里是 [=16= 的实例].因此,使用 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)