Python ignores default values of arguments supplied to tuple in inherited class
下面是一些代码来演示我在说什么。
1 2 3 4 5 6 | class Foo(tuple): def __init__(self, initialValue=(0,0)): super(tuple, self).__init__(initialValue) print Foo() print Foo((0, 0)) |
我希望这两个表达式产生完全相同的结果,但是这个程序的输出是:
1 2 | () (0, 0) |
号
我在这里不明白什么?
这是因为
1 2 3 4 | class Bar(tuple): @staticmethod def __new__(cls, initialValue=(0,0)): return tuple.__new__(cls, initialValue) |
这样做的基本原因是,由于元组是不可变的,所以在您甚至可以在Python级别看到它们之前,需要用它们的数据预先构造它们。如果数据是通过