Trong Python, tôi muốn xây dựng một thể hiện của lớp của Child trực tiếp từ một cá thể của lớp Parent. Ví dụ:Kế thừa từ ví dụ trong Python
A = Parent(x, y, z)
B = Child(A)
Đây là một hack mà tôi nghĩ có thể làm việc:
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)
Nhưng khi tôi chạy
B = Child(A)
tôi nhận được:
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)
Dường hack hoạt động giống như tôi mong đợi nhưng trình biên dịch ném một T ypeError ở cuối. Tôi đã tự hỏi nếu tôi có thể quá tải TypeError để làm cho nó bỏ qua B = Child (A) thành ngữ nhưng tôi đã không chắc chắn làm thế nào để làm điều đó. Trong mọi trường hợp, bạn vui lòng cho tôi các giải pháp của bạn để kế thừa từ các trường hợp?
Cảm ơn!
Chỉ cần một FYI, "khởi tạo" được viết bằng chữ 'a' trong đó. Đã cố gắng chỉnh sửa điều này nhưng StackOverflow sẽ không cho phép chỉnh sửa dưới 6 chữ cái. – cfwschmidt