使用父实例初始化子实例

ely*_*ase 3 python inheritance initialization class

我有一个返回 Parent 类实例的函数:

def generateParent():
   do_stuff
   return Parent(some_parameters)
Run Code Online (Sandbox Code Playgroud)

现在我想用调用的结果来初始化 Parent 的子类generateParent()

class Child(Parent):
    def __new__():
        return generateParent(some_other_parameters) 
Run Code Online (Sandbox Code Playgroud)

问题是,当我重写 Child 中 Parent 的某些方法,然后在程序中的 Child 实例中调用它们时,会调用原始 Parent 方法,而不是 Child 中的新方法。我在这里做错了什么吗?我在这里使用正确的设计来完成我的任务吗?

编辑:我无法访问 Parent 或generateParent()

解决方案(感谢@Paul McGuire的回答):

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

    def __getattr__(self, attr):
        return getattr(self.obj, attr)
Run Code Online (Sandbox Code Playgroud)

Pau*_*McG 5

由于generateParent不是您的代码,因此您可能希望使用包含和委托,而不是继承。也就是说,不是定义子类,而是定义一个包含生成对象的包装类,在需要时将方法调用转发给它,但可以在包装器中添加新行为或修改的行为。

这个问题中,OP也有类似的情况,在库中生成了一个类,但想要扩展该类和/或修改该类的某些行为。看看我如何在该问题中添加包装类,您可能会考虑在这里做类似的事情。