我刚刚开始学习python面向对象编程。在一些框架的源代码中,我偶然发现了return super(...,我想知道这两者之间是否有区别。
class a(object):
def foo(self):
print 'a'
class b(object):
def foo(self):
print 'b'
class A(a):
def foo(self):
super(A, self).foo()
class B(b):
def foo(self):
return super(B, self).foo()
>>> aie = A(); bee = B()
>>> aie.foo(); bee.foo()
a
b在我看来是一样的。我知道如果你听之任之,OOP可能会变得相当复杂,但在我学习的这一点上,我没有必要想出一个更复杂的例子。是否存在返回super与调用super不同的情况
发布于 2013-09-06 11:21:45
是。考虑这样一种情况,超类的foo不仅仅是打印,它还返回了一些东西:
class BaseAdder(object):
def add(self, a, b):
return a + b
class NonReturningAdder(BaseAdder):
def add(self, a, b):
super(NonReturningAdder, self).add(a, b)
class ReturningAdder(BaseAdder):
def add(self, a, b):
return super(ReturningAdder, self).add(a, b)假设有两个实例:
>>> a = NonReturningAdder()
>>> b = ReturningAdder()当我们在a上调用foo时,似乎什么都没有发生:
>>> a.add(3, 5)然而,当我们在b上调用foo时,我们得到了预期的结果:
>>> b.add(3, 5)
8这是因为当NonReturningAdder和ReturningAdder都调用BaseAdder的foo时,NonReturningAdder会丢弃返回值,而ReturningAdder会传递返回值。
https://stackoverflow.com/questions/18649348
复制相似问题