Я пытаюсь создать коллекцию форм многократного использования, используя python3 tkinter, используя mixin для общих методов, таких как команды меню и т. Д. Поскольку mixin используется в большинстве компонентов, он создает несколько отдельных экземпляров класса mixin.но мои попытки превратить миксин в синглтон потерпели неудачу с TypeError: object() takes no parameters
Я старый программист на коболе, который начал этот проект, чтобы попытаться обойти мою голову - это заставляет мою голову болеть
Я добавил промежуточный базовый класс, который должен лишать аргументов никакого эффекта.
PROGRAM_NAME = "GuiMenuMixin"
class Base(object):
def __init__(self, *args, **kwargs): pass
class GuiMenuMixin(Base):
_singleton = None
def __new__(cls,*args, **kwargs):
if not cls._singleton:
cls._singleton = super().__new__(cls,*args,**kwargs)
return cls._singleton
def __init__(self):
try:
self.initialProgramName
except AttributeError:
try:
self.programName
self.initialProgramName = self.programName
except AttributeError:
self.programName = PROGRAM_NAME
# pretty basic mixin stuff follows
# sample usage which fails
class SimpleTitleBarFrame(Frame, GuiMenuMixin):
def __init__(self, parent=None, **args):
super().__init__(parent, **args)
try: self.programName
except AttributeError: self.programName = PROGRAM_NAME
GuiMenuMixin.__init__(self)
self.parent=parent
############## stuff removed
leftMenu = SimpleMenuBarFrame(self, menuSpec=self.menuSpec, style="BW.TLabel")
leftMenu.grid(row=0,column=6,sticky=W)
self.columnconfigure(6, weight=0)
rightIcons = SimpleIconBarFrame(self, iconSpec=self.iconSpec)
rightIcons.grid(row=0,column=10,sticky=W)
self.columnconfigure(10, weight=0)
#### This runs ok as it does not call any child frames utilising the mixin
PROGRAM_NAME = "SimpleMenuBarFrame"
class SimpleMenuBarFrame(Frame, GuiMenuMixin,):
def __init__(self, parent=None, **args):
super().__init__(parent, **args)
try:
self.programName
except AttributeError:
self.programName = PROGRAM_NAME
GuiMenuMixin.__init__(self)
self.menuBar = self.makeMenu(menuSpec=self.menuSpec)
Ошибка:
TypeError: object() takes no parameters