No python 3, como criar uma instância de classe filho usando alguma mágica no pai __new__?

Por exemplo, criando tipos de números personalizados na seguinte hierarquia

NumberComplexRealIntFloat

com lógica em__new__ métodos:

class Number:
    def __new__(cls, value):
        if isinstance(value, complex):
            return Complex(value)
        elif isinstance(value, (int, float)):
            return Real(value)
        else:
            raise TypeError('Ну ты и мудак!!!')

    def __init__(self, value):
        self.value = value


class Complex(Number):
    pass


class Real(Number):
    def __new__(cls, value):
        if isinstance(value, int):
            return Int(value)
        elif isinstance(value, float):
            return Float(value)
        else:
            raise TypeError('Ты больше не можешь вести себя так!!!')


class Int(Real):
    pass


class Float(Real):
    pass

E então, criandoFloat instância usandoNumber construtor:

number = Number(6.6)
assert isinstance(number, Float)

Este código irá aumentarRuntimeError por causa do limite de recursão. É apenas um exemplo do comportamento desejado. Mas também tentei implementar isso usandosuper e parece que eu entendi mal o mundo.

questionAnswers(1)

yourAnswerToTheQuestion