这种好奇心所带来的差异和问题是什么:
class A(object):
def __init__(self):
super(A, self).__init__()
比
class A(object):
def __init__(self):
pass
class B(A):
def __init__(self):
super(B, self).__init__()
即使第一个例子是错误的,它也可以。我认为这可能是一个冗余,但我听说在一个继承自object的类中使用super()是错误的,但为什么呢?
答案 0 :(得分:1)
使用super(A, self).__init__()
就好了; object
也有__init__
方法。
不的工作是尝试将参数传递给该方法; object.__init__()
不带参数。对于大多数方法其他而不是__init__
,直接从super()
派生的类中的object
也可能无效,因为object
没有特定的你试图打电话的方法。
因此,将super(class, self).__init__()
与除空参数列表之外的任何内容一起使用时,需要对类层次结构有更深入的了解,其中任何直接从object
派生的类都应该注意不要传递参数。
对于任何自定义方法,super(class, self).other_method
很可能会失败,因为object
根本没有实现该方法。
答案 1 :(得分:1)
super(class.self)是一个与所谓的MRO或方法解析顺序交互的方式。
一个非常重要的概念。这是MRO上的Guido:http://python-history.blogspot.com/2010/06/method-resolution-order.html?m=1