2010-05-07 87 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