Python中super()和super(className,self)的区别

10

我有这样的代码片段:

class A:
    def test(self):
        return 'A'

class B(A):
    def test(self):
        return 'B->' + super(B, self).test()

print(B().test())

输出:B->A
如果我写类似这样的内容,那么我会得到相同的输出:
class A:
    def test(self):
        return 'A'

class B(A):
    def test(self):
        return 'B->' + super().test()  # change to super()


print(B().test())

在这两种情况下,我得到的输出结果是相同的。那么,我想知道调用super的这两种方式有何不同?使用其中任何一种的优缺点是什么?


2
没有区别 - 语法糖。 - wim
@wim:嗯,是的,有很大的区别,请参见为什么Python 3.x的super()函数如此神奇?。通常情况下并不重要,但是super(B, self)晚一点查找B - Martijn Pieters
还有相关内容:https://www.python.org/dev/peps/pep-3135/ 和 为什么Python 2的super需要显式类和self参数? - Martijn Pieters
我知道,但是实现的复杂性与这个问题无关。 - wim
1个回答

15

在Python 2中,只有super(className,self)语法是可行的。因为它是最常用的版本,自从Python 3之后,不提供参数将会执行相同的操作。

super的两个典型用例:在具有单一继承的类层次结构中,可以使用super来引用父类而无需显式命名它们,从而使代码更易于维护。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接