我想扩展Tkinter.Tcl的行为。我试过继承它但事实证明Tcl是一个返回一个对象的工厂函数。如果Tcl是一个班级,我会简单地说:
from Tkinter import *
class TclPlus(Tcl): # <- broken
def foo(self, *args, **kwargs):
print "foo"
我可以升级Tk,我的新班级将有一个Tcl工厂功能,但我会回到我开始的地方。此外,Tk包括所有窗口开销,我不需要它。
实现这一目标的最佳方法是什么?
编辑:http://code.activestate.com/recipes/52295-automatic-delegation-as-an-alternative-to-inherita/这似乎正是我所追求的。评论
答案 0 :(得分:0)
如果查看Tcl
函数,可以看到用于创建Tk
实例的有趣标记
def Tcl(screenName=None, baseName=None, className='Tk', useTk=0): return Tk(screenName, baseName, className, useTk)
因此,您可以继承Tk
并禁止Tk实例化
class TclPlus(Tk):
def __init__(self):
Tk.__init__(self,useTk=0)
tcl = TclPlus()
tcl.eval("expr 6*7")