为什么我的Python继承/超级示例不起作用?

use*_*523 3 python inheritance super

以下为什么不工作:

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
Run Code Online (Sandbox Code Playgroud)

输出是(1,1),而我期望看到(2,2).

另外,为什么我会得到弃用警告该对象.init()不带参数?我该怎么做呢?

Ósc*_*pez 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)
Run Code Online (Sandbox Code Playgroud)

现在这可以按预期工作:

a = CTest((1,1))
print a
> (2, 2)
Run Code Online (Sandbox Code Playgroud)

请查看此帖子了解更多详情.