python - 我可以覆盖 Python 列表显示吗?

标签 python list overriding

我想改变 Python 列表显示的行为,这样它们就不会生成 list,而是生成我编写的 list 的子类。 (注意:我不认为这是个好主意;我这样做是为了好玩,而不是实际用途。)

这是我所做的:

old_list = list

class CallableList(old_list):
    def __init__(self, *args):
        old_list.__init__(self)
        for arg in args:
            self.append(arg)
    def __call__(self, start, end=None):
        if end:
            return self[start:end]
        return self[start]

list = CallableList

一旦完成,这将返回列表的第三个元素:

x = list(1, 2, 3)
print x(2)

但这仍然会报错:

x = [1, 2, 3]
print x(2)

错误非常简单:

Traceback (most recent call last):
  File "list_test.py", line 23, in <module>
    print x(2)
TypeError: 'list' object is not callable

我认为可能没有办法做到这一点,但我找不到任何明确说明的内容。有什么想法吗?

最佳答案

您不能轻而易举地覆盖用于内置类型的语法糖,因为这发生在编译器级别。始终显式调用构造函数。

关于python - 我可以覆盖 Python 列表显示吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3795591/

相关文章:

python - 为什么这个Python错误代码是: Too Few parameters. Expected1。 (-3010) 使用 pyodbc 时发生?

python - 为什么使用 pip install requirements.txt 而不是 pip install ./?

python - 如何使用 FFT 进行一维反卷积?

java - 用Java读取文本文件并通过递归向后打印

java - 返回类型不兼容

python - 通过 lambda + Pandas 数据框定义 Snakemake 输入规则

regex - Scala:将字符串与正则表达式列表进行匹配

r - 根据列名向量在列表中按列子集数据帧并汇总列

python argparse 不显示正确的帮助信息

java - Java 中的静态和覆盖