3

为什么以下不起作用:

class CTest(tuple):
    def __init__(self,arg):
        if type(arg) is tuple:
            super(CTest,self).__init__((2,2))
        else:
            super(CTest,self).__init__(arg)
a=CTest((1,1))
print a

输出是 (1,1),而我希望看到 (2,2)。

另外,为什么我会收到该对象的弃用警告。init () 不带参数?我应该怎么做?

4

1 回答 1

5

元组是不可变的,你必须重写__new__

class CTest(tuple):
    def __new__(cls, arg):
        if type(arg) is tuple:
            return super(CTest, cls).__new__(cls, (2, 2))
        else:
            return super(CTest, cls).__new__(cls, arg)

现在这可以按预期工作:

a = CTest((1,1))
print a
> (2, 2)

请查看这篇文章以获取更多详细信息。

于 2012-04-05T04:16:39.303 回答