2014-02-18 1 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'>