为什么没有以下工作:
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 :(得分: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。