This is because the tuple type does not care about __init__ arguments, but only those related to __new__ . This will make it work:
class Bar(tuple): @staticmethod def __new__(cls, initialValue=(0,0)): return tuple.__new__(cls, initialValue)
The main reason for this is that since tuples are immutable, they must first be constructed with their data before you can even see them at the Python level. If the data was sent via __init__ , you would basically have an empty tuple at the beginning of your own __init__ , which then changed when you called super().__init__() .
source share