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
Number
Complex
Real
Int
Float
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.