我是Python面向对象编程的新手,我很难理解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__()
print "that's it"
Run Code Online (Sandbox Code Playgroud)
我没有得到的是:Third()该类是否会继承构造函数方法?如果是,那么将使用super()运行哪一个?为什么?
如果你想运行另一个怎么办?我知道它与Python方法解析顺序(MRO)有关.
从这样的两个对象继承时
class Foo(object):
def __init__(self,a):
self.a=a
class Bar(object):
def __init__(self,b):
self.b=b
Run Code Online (Sandbox Code Playgroud)
我通常会这样做
class FooBar(Foo,Bar):
def __init__(self,a,b):
Foo.__init__(self,a)
Bar.__init__(self,b)
Run Code Online (Sandbox Code Playgroud)
超级怎么知道我是否想要同时打电话?如果是这样,它将如何知道哪个参数传递到哪里.或者根本不可能在这里使用超级?
即使Foo和Bar采取相同的论点可以super处理这个?
或者我不应该首先尝试这样做吗?