对继承自Python列表的类进行排序

时间:2014-02-18 18:33:43

标签: python list inheritance override method-overriding

鉴于以下实施:

class MyList(list):
    def __init__(self, arg=None):
        super(MyList, self).__init__(arg)

myList = MyList([1,3,2])

print type(myList) # print <class '__main__.MyList'>
print type(sorted(myList)) # print <type 'list'>

是否有任何list()方法可以覆盖,sorted()将返回MyList()的实例?

1 个答案:

答案 0 :(得分:4)

不,没有; sorted()始终返回一个列表,无论您传递给它的是什么。这不仅限于您的自定义类。

sorted()接受任何迭代,包括生成器,并输出一个排序列表:

>>> sorted((1, 4, 2))
[1, 2, 4]
>>> sorted(xrange(4, -1, -1))
[0, 1, 2, 3, 4]

您的课程将采用自定义.sort()方法,因此就地排序仍应有效:

>>> class MyList(list):
...     def __init__(self, arg=None):
...         super(MyList, self).__init__(arg)
...     pass
... 
>>> myList = MyList([1,3,2])
>>> myList.sort()
>>> myList
[1, 2, 3]
>>> type(myList)
<class '__main__.MyList'>