Наследование от экземпляра в Python
В Python я хотел бы создать экземпляр класса Child непосредственно из экземпляра класса Parent. Например:
A = Parent(x, y, z)
B = Child(A)
Это хак, который я думал, может сработать:
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)
Но когда я бегу
B = Child(A)
Я получил:
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)
Кажется, хак работает так, как я и ожидал, но компилятор выдает TypeError в конце. Мне было интересно, могу ли я перегрузить TypeError, чтобы он игнорировал идиому B = Child (A), но я не был уверен, как это сделать. В любом случае, не могли бы вы дать мне ваши решения для наследования от экземпляров?
Спасибо!