2010-05-07 58 views
1

如何查看和覆蓋內置類的完整定義?我看過the library docs但我正在尋找更多的東西。覆蓋內置類(Python)

例如,是否有可能重寫數組類,以便基本索引從1開始而不是從0開始,或者將列表的.sort()重寫爲我自己喜歡的排序算法?

+3

無論是否可能 - 你真的想這麼做嗎?我的意思是將Python中的數組替換爲另一個不同的工作,以至於所有使用Array的Python庫中的所有代碼都會中斷? – eemz 2010-05-07 16:24:20

+0

從紅寶石移植? – 2010-05-07 16:47:47

+0

我明白你爲什麼想要開發自己的MyArray類,它的工作方式類似於Ruby數組,或者其他什麼,但是海報問他用全部的Python替換了Python的Array類。 – eemz 2010-05-07 17:24:32

回答

3

可以繼承自內建類型並覆蓋或添加行爲。如果你這是另一個問題。對於基於n的列表的實現(例如從1開始)see this link(數組應該非常相似)。

對於排序,您可以簡單地使用sorted上的鍵功能。

+0

謝謝你的幫助。 – Yipeng 2010-05-09 16:07:26

7

創建自己sort()方法,它是如此簡單:

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

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

我不會建議改變列表被收錄爲違背最佳實踐的方法,所以我甚至不提供示例那!無論何時你想打破運算符重載或索引等慣例,我覺得你應該重新思考爲什麼你要這樣做並適應慣例。

+0

謝謝你的幫助。 – Yipeng 2010-05-09 16:06:33

+1

我可以理解,這不是建議......但我只想知道是否(以及如何)可以完成。 – Yipeng 2010-05-09 16:06:56

+1

您正在尋找的是在您的子類中重載'__getitem__':http://docs.python.org/reference/datamodel.html#object.__getitem__ – jathanism 2010-05-09 19:00:31