Let me humbly conjecture that the people who wrote the top answers have background in less capable languages than Python.

Not every language allows you to call self.__class__().  In the languages that don't you can get away with incompatible constructor signatures.

However, let me try to focus the discussion on a specific issue before we go deep into OOP theory.

With python's standard datetime.date we have:

>>> from datetime import *
>>> class Date(date):
...     pass
...
>>> Date.today()
Date(2015, 2, 13)
>>> Date.fromordinal(1)
Date(1, 1, 1)

Both .today() and .fromordinal(1) will break in a subclass that redefines __new__ as follows:

>>> class Date2(date):
...     def __new__(cls, ymd):
...         return date.__new__(cls, *ymd)
...
>>> Date2.today()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: __new__() takes 2 positional arguments but 4 were given
>>> Date2.fromordinal(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: __new__() takes 2 positional arguments but 4 were given

Why is this acceptable, but we have to sacrifice the convenience of having Date + timedelta
return Date to make it work  with Date2:

>>> Date2((1,1,1)) + timedelta(1)
datetime.date(1, 1, 2)