如何在python中使用原始扩展继承的方法

时间:2013-12-21 13:36:22

标签: python oop inheritance

我正在尝试在python中扩展类方法的功能,但我不确切知道如何。以下是一个(明显错误的)python代码示例,可能会解释我想要做的事情:

class A(object):
    def foo(self):
        return dict({'field1':'value1'})

class B(A):
    def foo(self):
        return A.foo().update({'field2':'value2'})

fooB的扩展名应返回两个字段,A和B .

1 个答案:

答案 0 :(得分:4)

dict.update方法更新dict但返回None。所以你需要小心返回dict,而不是update返回的值(None)。

在这种情况下,您可以使用“扩展”foo方法 super(B, self).foo()A.foo(self)

class B(A):
    def foo(self):
        dct = super(B, self).foo()
        dct.update({'field2':'value2'})
        return dct

purpose of super用于解析继承钻石(由于多重继承而产生)。 Using super使您的B可以合并到使用多重继承的类结构中。然而There are pitfalls使用super。如果您希望您的班级仅支持单一继承,那么

dct = super(B, self).foo()

可以替换为

dct = A.foo(self)

人们可能希望避免使用多重继承(1234)的原因有很多。如果这些理由适用于您的情况,那么使用更简单,更直接的

并没有错 - 实际上有充分的理由
dct = A.foo(self)

而不是super