【问题标题】:Overriding Built-in Classes (Python)覆盖内置类 (Python)
【发布时间】:2010-05-07 16:20:37
【问题描述】:

如何查看和覆盖内置类的完整定义?我见过the library docs,但正在寻找更多。

例如是否可以覆盖 Array 类以使基本索引从 1 而不是 0 开始,或者将列表的 .sort() 覆盖为我自己喜欢的排序算法?

【问题讨论】:

  • 不管有没有可能——你真的想这样做吗?我的意思是将 Python 中的任何地方的 Array 替换为另一个工作方式完全不同的 Array,以至于 Python 库中使用 Array 的所有代码都会中断?
  • 我理解您为什么要开发自己的 MyArray 类,它像 Ruby 数组或其他任何东西一样工作,但发帖人询问是否要全面用他自己的替换 Python 的 Array 类。跨度>

标签: python overriding built-in


【解决方案1】:

要创建自己的sort() 方法,就这么简单:

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

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

我不建议更改列表的索引方式,因为这违反了最佳实践,所以我什至没有提供这样的示例!每当您想打破诸如运算符重载或索引之类的约定时,我认为您应该重新考虑为什么要这样做并适应约定。

【讨论】:

【解决方案2】:

可以从内置类型继承并覆盖或添加行为。如果您应该这样做完全是另一个问题。对于基于 n 的列表的实现(例如从 1 开始)see this link(数组应该非常相似)。

对于排序,您可以简单地使用sorted 上的键功能。

【讨论】:

    猜你喜欢
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    相关资源
    最近更新 更多