如果你想在子进程中使用super来调用parent .__ init__和parent2._init__,那么父__init__s也必须调用super:
class parent(Base):
def __init__(self,x=1,y=2):
super(parent,self).__init__(x,y)
class parent2(Base):
def __init__(self,x=3,y=4):
super(parent2,self).__init__(x,y)
class Base(object):
def __init__(self,*args):
pass
class parent(Base):
var1=1
var2=2
def __init__(self,x=1,y=2):
super(parent,self).__init__(x,y)
self.var1=x
self.var2=y
class parent2(Base):
var4=11
var5=12
def __init__(self,x=3,y=4):
super(parent2,self).__init__(x,y)
self.var4=x
self.var5=y
def parprint(self):
print self.var4
print self.var5
class child(parent, parent2):
var3=5
def __init__(self,x,y):
super(child, self).__init__(x,y)
childobject = child(9,10)
print childobject.var1
print childobject.var2
print childobject.var3
childobject.parprint()
你可能会想,“为什么要使用Base?如果parent和parent2直接从对象继承,那么
super(parent2,self).__ init __(x,y)将调用对象.__ init __(x,y)。这会引发TypeError,因为对象.__ init __()不带参数。
要解决这个问题,您可以创建一个类Base,它接受参数到__init__,但不会将它们传递给对象.__ init__。使用parent和parent2继承自Base,您可以避免TypeError。