, пожалуйста, помогите исправить сценарий.Как реализовать множественное наследование?
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, тогда не делайте класс C, который явно наследует от A и B. Просто наследуйте его от B, и это автоматически также сделает его наследованием от A. – BrenBarn