Python忽略了在继承的类中提供给元组的参数的默认值

时间:2014-09-03 00:35:16

标签: python inheritance constructor tuples

以下是一些代码,用于演示我正在谈论的内容。

class Foo(tuple):
   def __init__(self, initialValue=(0,0)):
      super(tuple, self).__init__(initialValue)

print Foo()
print Foo((0, 0))

我希望两个表达式都能得到完全相同的结果,但是这个程序的输出是:

()
(0, 0) 

我在这里不理解什么?

1 个答案:

答案 0 :(得分:10)

这是因为tuple类型不关心__init__的参数,而只涉及__new__的参数。这将使它工作:

class Bar(tuple):
    @staticmethod
    def __new__(cls, initialValue=(0,0)):
        return tuple.__new__(cls, initialValue)

这个的基本原因是,由于元组是不可变的,所以在你甚至可以在Python级别看到它们之前,需要预先构造它们的数据。如果数据是通过__init__提供的,那么您自己__init__的开头基本上会有一个空元组,然后在您调用super().__init__()时会发生变化。