子类化内置类型时的问题

6 投票
1 回答
1318 浏览
提问于 2025-04-16 10:46
# 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)

撰写回答