我有一个函数,它返回父类的实例:
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中生成了一个类,但希望扩展该类和/或修改该类的某些行为。看看我是如何在这个问题中添加包装类的,您可以考虑在这里做类似的事情。