我只是在深入研究一些更高级的 python 主题(好吧,至少对我来说是高级的)。我现在正在阅读有关多重继承以及如何使用 super() 的内容。我或多或少了解超级函数的使用方式,但是(1)这样做有什么问题?:
class First(object):
def __init__(self):
print "first"
class Second(object):
def __init__(self):
print "second"
class Third(First, Second):
def __init__(self):
First.__init__(self)
Second.__init__(self)
print "that's it"
关于 super(),Andrew Kuchlings 关于 Python Warts 的论文说:
当 Derived 类继承自多个基类并且其中一些或全部具有init 方法时,super() 的使用也是正确的
所以我把上面的例子改写如下:
class First(object):
def __init__(self):
print "first"
class Second(object):
def __init__(self):
print "second"
class Third(First, Second):
def __init__(self):
super(Third, self).__init__(self)
print "that's it"
但是,这只运行它可以找到的第一个init,它位于First
. (2) 可super()
用于运行 init 的 fromFirst
和Second
,如果可以,如何运行?运行super(Third, self).__init__(self)
两次只是运行 First。init () 两次..
增加一些混乱。如果继承类的init () 函数采用不同的参数会怎样。例如,如果我有这样的事情怎么办:
class First(object):
def __init__(self, x):
print "first"
class Second(object):
def __init__(self, y, z):
print "second"
class Third(First, Second):
def __init__(self, x, y, z):
First.__init__(self, x)
Second.__init__(self, y, z)
print "that's it"
(3) 如何使用 super() 为不同的继承类 init 函数提供相关参数?
欢迎所有提示!
附言。由于我有几个问题,我将它们加粗并编号。