встроенный тип подклассов - PullRequest
6 голосов
/ 28 января 2011
# Python 3
class Point(tuple):
    def __init__(self, x, y):
        super().__init__((x, y))

Point(2, 3)

приведет к

TypeError: tuple () принимает не более 1 аргумента (задано 2)

Почему?Что мне делать вместо этого?

1 Ответ

10 голосов
/ 28 января 2011

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)
...