我有一个函数,它返回父类的实例:

def generateParent():
   do_stuff
   return Parent(some_parameters)

现在我想用调用generateParent()的结果初始化父类的一个子类:
class Child(Parent):
    def __new__():
        return generateParent(some_other_parameters)

问题是,当我重写来自Parent-in-Child的一些方法,然后在程序中的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)

最佳答案

因为generateParent不是您的代码,所以您可能希望使用包含和委托,而不是继承。也就是说,不要定义子类,而是定义包含生成对象的包装类,在需要时将方法调用转发给它,但可以在包装中添加新的行为或修改的行为。
this question中,OP也有类似的情况,在libary中生成了一个类,但希望扩展该类和/或修改该类的某些行为。看看我是如何在这个问题中添加包装类的,您可以考虑在这里做类似的事情。

09-13 06:53