为什么我们将对象作为参数提供给super()?

时间:2017-12-15 14:32:12

标签: python

在python文档中,可以阅读以下有关super()

的内容
  

如果省略第二个参数,则返回的超级对象是   未结合的。

他们指的是super(class_name, second_argument)中的第二个参数。对象未绑定意味着什么?我听说过未绑定的方法,这意味着它们不存在于任何对象上,而是存在于一个类中(如果我错了请纠正我),但什么是未绑定的对象?

以下是相同文档中提供的代码示例。它显示了对super()的典型调用,以获取超类的重写方法。

class C(B):
    def method(self, arg):
        super(C, self).method(arg)

如您所见,他们确实使用了第二个参数。我们为什么要那样做?如果我们没有会发生什么?

编辑:我尝试了以下内容......

class B(object):
    def method(self, arg):
        print(arg)

class C(B):
    def method(self, arg):
        super(C, self).method(arg)

class D(B):
    def method(self, arg):
        super(D).method(arg)

c = C()
d = D()

c.method("hi")
d.method("hi again")

c.method()的调用工作正常,打印“hi”,但第二次调用d.method()已崩溃:

n132-p95:Desktop sahandzarrinkoub$ python2 super.py
hi
Traceback (most recent call last):
  File "super.py", line 17, in <module>
    d.method("hi again")
  File "super.py", line 11, in method
    super(D).method(arg)
AttributeError: 'super' object has no attribute 'method'

0 个答案:

没有答案