2014-02-18 116 views
0

繼承考慮下面的實現:排序類從Python列表

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'> 

有()我可以重寫,使得sorted()將返回MyList()實例列表的任何方法?

+0

因爲你調用'super(MyList,self).__ init __()'沒有參數,你的列表對象實際上是完全空的。 –

+0

對,剛剛糾正 – memecs

回答

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'>