我正在尝试在python中扩展类方法的功能,但我不确切知道如何。以下是一个(明显错误的)python代码示例,可能会解释我想要做的事情:
class A(object):
def foo(self):
return dict({'field1':'value1'})
class B(A):
def foo(self):
return A.foo().update({'field2':'value2'})
foo
中B
的扩展名应返回两个字段,A
和B .
答案 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)
人们可能希望避免使用多重继承(1,2,3,4)的原因有很多。如果这些理由适用于您的情况,那么使用更简单,更直接的
并没有错 - 实际上有充分的理由dct = A.foo(self)
而不是super
。