2012-04-05 68 views
3

为什么没有了以下工作:为什么我的Python继承/超级示例不起作用?

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()不需要参数?我该怎么做呢?

+0

语言是什么? – 2012-04-05 04:12:18

+0

@PetrAbdulin - 从它的外观来看,Python。 – DMan 2012-04-05 04:14:20

+0

更正,对不起。它是Python。 – user1308523 2012-04-05 04:14:56

回答

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) 

看看这个post进一步的细节。

相关问题