子类化内置类型时的问题
# Python 3
class Point(tuple):
def __init__(self, x, y):
super().__init__((x, y))
Point(2, 3)
这段代码会导致一个错误,错误信息是:
类型错误:tuple() 最多只能接收 1 个参数,但给了 2 个。
为什么会这样呢?我该怎么做才好呢?
1 个回答
10
tuple
是一种不可变的数据类型。这意味着它一旦被创建,就不能再改变了,甚至在 __init__
方法被调用之前,它就已经是不可变的了。这就是为什么你不能像你想的那样去做。
如果你真的想要创建一个继承自元组的类,可以使用 __new__
方法。
>>> class MyTuple(tuple):
... def __new__(typ, itr):
... seq = [int(x) for x in itr]
... return tuple.__new__(typ, seq)
...
>>> t = MyTuple((1, 2, 3))
>>> t
(1, 2, 3)