在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'