我有一个返回 Parent 类实例的函数:
def generateParent():
do_stuff
return Parent(some_parameters)
现在我想用调用的结果来初始化 Parent 的子类generateParent()
:
class Child(Parent):
def __new__():
return generateParent(some_other_parameters)
问题是,当我重写 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)
Since generateParent
不是您的代码,那么您可能希望使用包含和委托而不是继承。也就是说,不是定义子类,而是定义一个包含生成对象的包装类,在需要时将方法调用转发给它,但可以在包装器中添加新行为或修改的行为。
In 这个问题 https://stackoverflow.com/questions/1382871/dynamically-attaching-a-method-to-an-existing-python-object-generated-with-swig/1383646#1383646,OP 也有类似的情况,在库中生成了一个类,但想要扩展该类和/或修改该类的某些行为。看看我如何在该问题中添加包装类,您可能会考虑在这里做类似的事情。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)