我想改变 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/