2014-09-03 83 views
5

下面是一些代码来演示我在说什么。Python忽略提供给继承类中的元组的参数的默认值

​​

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

() 
(0, 0) 

什么我不理解吗?

+1

我相信[这个答案](http://stackoverflow.com/questions/3120562/python-subclassing-immutable-types)可能是照亮。 – Amadan 2014-09-03 00:44:32

回答

10

这是因为tuple类型不关心__init__的参数,但仅关注到__new__的参数。这将使其工作:

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

造成这种情况的根本原因是,由于元组是不可变的,他们需要与他们的数据预构建之前,你甚至可以看到他们在Python层面。如果数据是通过__init__提供的,那么基本上在您自己的__init__开始时会有一个空元组,然后在您调用super().__init__()时发生更改。

+0

[这是另一个详细的解释](http://stackoverflow.com/a/1565448/1460057)。 – Brionius 2014-09-03 00:47:10

+0

它也发生与数组以及? – levi 2014-09-03 00:47:56

+1

@levi:如果你用“数组”表示'list',那么不行。他们通过'__init__'获取他们的论点。 – Dolda2000 2014-09-03 00:48:43

相关问题