在学习python对象的一些知识,到了继承这里发现一个报错:
TypeError: Cannot create a consistent method resolution
class oai():
def __init__(self, name):
self.name = name
def intro(self):
print("我是%s!" % self.name)
def meng(self):
print('主人,求抱抱!')
class hai(oai):
def __init__(self, name, iq):
self.name = name
self.iq = iq
def intro(self):
print("我是高级机器人%s!智商高达%d!" % (self.name, self.iq))
def hmeng(self):
print("主人,每次想到怎么欺负你的时候,就感觉自己全身biubiubiu散发着智慧的光芒!")
#此处继承顺序有误,因为hai类已经继承了oai类,按照先继承oai再hai的顺序会发生错乱,故会报错
class super(oai,hai):
def suMeng(self):
print('pika, qiu!')
print(''' へ /|
/\7 ∠_/
/ │ / /
│ Z_,< / /`ヽ''')
andi = super("andi", 190)
andi.suMeng()
解决方法:继承多个子类时,如果其中一个子类时也是继承的子类,则需要先继承子类再继承对应的父类。
实际,继承多个子类时,子类若是继承的,则没有很大必要再继承该子类对应的父类,写太多也可能会很复杂,也会出现奇奇怪怪的报错
修改后:
class oai():
def __init__(self, name):
self.name = name
def intro(self):
print("我是%s!" % self.name)
def meng(self):
print('主人,求抱抱!')
class hai(oai):
def __init__(self, name, iq):
self.name = name
self.iq = iq
def intro(self):
print("我是高级机器人%s!智商高达%d!" % (self.name, self.iq))
def hmeng(self):
print("主人,每次想到怎么欺负你的时候,就感觉自己全身biubiubiu散发着智慧的光芒!")
# 调整了继承的顺序,可以成功运行
class super(hai, oai):
def suMeng(self):
print('pika, qiu!')
print(''' へ /|
/\7 ∠_/
/ │ / /
│ Z_,< / /`ヽ''')
andi = super("andi", 190)
andi.suMeng()
运行效果: