为什么以下方法不起作用:

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)。
另外,为什么我会收到一个关于object.init()不带参数的不推荐警告?我该怎么做呢?

最佳答案

元组是不可变的,必须重写__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)

查看此post以了解更多详细信息。

关于python - 为什么我的Python继承/ super 示例不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10022438/

10-10 03:41