请帮忙修复脚本。如何实现多重继承?
import tkinter
import sys
class mainMenu(tkinter.Frame):
def __init__(self, parent):
tkinter.Frame.__init__(self, parent)
self.pack(side = 'top', fill = 'x')
self.parent = parent
self.make_menu_bar()
def make_menu_bar(self):
menubar = tkinter.Menu(self.parent)
self.parent.config(menu = menubar)
file = tkinter.Menu(menubar, tearoff = False)
file.add_command(label = 'Quit', command = sys.exit())
menubar.add_cascade(label = 'File', menu = file)
class MainFrame(tkinter.Frame, mainMenu):
def __init__(self, parent):
tkinter.Frame.__init__(self, parent)
self.pack(side = 'top', fill = 'x', expand = 'yes')
self.parent = parent
self.make_elements()
def make_elements():
self.menu = TextPadMenu.__init__(self, parent)
root = MainFrame(tkinter.Tk())
root.mainloop()
问题是,类MainFrame不能继承:tkinter.Frame,mainMenu。错误消息是:
Traceback (most recent call last): File "C:\Python33\projects\TEXTPADS\textPad_OOP\q.py", line 22, in class MainFrame(tkinter.Frame, mainMenu): TypeError: Cannot create a consistent method resolution order (MRO) for bases Frame, mainMenu
为什么你要'MainFrame'从框架和MAINMENU继承? mainMenu已经从Frame继承,所以不需要再从Frame继承。 – BrenBarn
这个简单的案例研究,它没有实用价值。重要的是我理解原理 – Sergey
原则是,不要让一个类多次继承同一个类。如果B类从A继承,那么不要创建一个从A和B明确继承的类C.只要使它从B继承,并且这也会自动使它继承A.回答#1 – BrenBarn