En Python, me gustaría construir una instancia de la clase de Child directamente desde una instancia de la clase Parent. Por ejemplo:Heredar de instancia en Python
A = Parent(x, y, z)
B = Child(A)
Este es un truco que pensé que podría funcionar:
class Parent(object):
def __init__(self, x, y, z):
print "INITILIZING PARENT"
self.x = x
self.y = y
self.z = z
class Child(Parent):
def __new__(cls, *args, **kwds):
print "NEW'ING CHILD"
if len(args) == 1 and str(type(args[0])) == "<class '__main__.Parent'>":
new_args = []
new_args.extend([args[0].x, args[0].y, args[0].z])
print "HIJACKING"
return Child(*new_args)
print "RETURNING FROM NEW IN CHILD"
return object.__new__(cls, *args, **kwds)
Pero cuando corro
B = Child(A)
me sale:
NEW'ING CHILD
HIJACKING
NEW'ING CHILD
RETURNING FROM NEW IN CHILD
INITILIZING PARENT
Traceback (most recent call last):
File "classes.py", line 52, in <module>
B = Child(A)
TypeError: __init__() takes exactly 4 arguments (2 given)
Parece el truco funciona tal como esperaba pero el compilador arroja un T ypeError al final. Me preguntaba si podría sobrecargar TypeError para hacer que ignore el modismo B = Child (A), pero no estaba seguro de cómo hacerlo. En cualquier caso, ¿podría darme sus soluciones para heredar de instancias?
Gracias!
Solo un FYI, "inicialización" se escribe con una 'a'. Intenté editar esto pero StackOverflow no permitirá ediciones de menos de 6 letras. – cfwschmidt