Переопределение встроенных классов (Python) - PullRequest
2 голосов
/ 07 мая 2010

Как я могу просмотреть и переопределить полное определение для встроенных классов?Я видел библиотеку документов , но ищу что-то большее.

Например, возможно ли переопределить класс массива так, чтобы базовый индекс начинался с 1 вместо 0, или переопределить.sort() списка алгоритма сортировки по своему вкусу?

Ответы [ 2 ]

7 голосов
/ 07 мая 2010

Для создания собственного метода sort() все просто:

class MyList(list):
    def sort(self):
       return 'custom sorting algorithm'

mylist = MyList([1,2,3])
mylist.sort() # => 'custom sorting algorithm'

Я бы НЕ рекомендовал изменять способ индексации списков, так как это противоречит передовым методам, поэтому я даже не привожу пример этого! Всякий раз, когда вы хотите нарушить соглашение для таких вещей, как перегрузка операторов или индексирование, я чувствую, что вы должны переосмыслить, почему вы хотите это сделать, и приспособиться к соглашению.

3 голосов
/ 07 мая 2010

Вы можете наследовать от встроенных типов и переопределять или добавлять поведение. Если вы должны сделать это, это вообще другой вопрос. Для реализации списка на основе n (начиная с 1, например) см. Эту ссылку (массив должен быть очень похожим).

Для сортировки вы можете просто использовать функцию клавиши на sorted.

...