gpt4 book ai didi

python - 从 Python 中的实例继承

转载 作者:太空狗 更新时间:2023-10-29 17:57:03 24 4
gpt4 key购买 nike

在 Python 中,我想直接从父类的实例构造子类的实例。例如:

A = Parent(x, y, z)
B = Child(A)

这是我认为可能有效的 hack:

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) 习惯用法,但我不确定该怎么做。无论如何,您能给我您从实例继承的解决方案吗?

谢谢!

最佳答案

我发现这个(封装)是最干净的方式:

class Child(object):
def __init__(self):
self.obj = Parent()

def __getattr__(self, attr):
return getattr(self.obj, attr)

这样您就可以使用所有 Parent 的方法和您自己的方法,而不会遇到继承问题。

关于python - 从 Python 中的实例继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1081253/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com