我正在开发一个 Python 项目,我必须在我的代码中表示一个 GUI 结构。它看起来像这样:
- 窗口 1(包含按钮 1、按钮 2、按钮 3、对话框 1、...)
- window2(包含 button4、button5、dialog2、list1、...)
所以有许多窗口,每个窗口都有不同的内容,不同元素背后的功能也不同。每个窗口都可以有不同的自定义方法,这些方法只能在那里工作。
现在我有两种可能:
首先:
class Window1(object):
def __init__(self):
self.elements = {"button1":button1,"button2":button2,...}
def customMethod(self):
print "do custom"
class Window2(object):
def __init__(self):
self.elements = {"button4":button4,"button5":button5,...}
def otherCustomMethod(self):
print "do other custom"
...
window1 = Window1()
window2 = Window2()
但是如果我这样做,就会有很多类,每个窗口一个,我只需要每个窗口的一个实例。所以第二种可能性是动态创建正确的对象:
# create template class
class WindowGeneric(object):
pass
# create first window
window1 = WindowGeneric()
window1.elements = {"button4":button4,"button5":button5,...}
def customMethod(self):
print "do custom"
window1.customMethod = customMethod.__get__(window1, WindowGeneric) #bind to instance
#create second window
window2 = WindowGeneric()
window2.elements = {"button4":button4,"button5":button5,...}
def otherCustomMethod(self):
print "do other custom"
window1.otherCustomMethod = otherCustomMethod.__get__(window2, WindowGeneric) #bind to instance
但是这个解决方案看起来也很丑陋,因为得到“黑客”的东西。
这实际上是关于对象的创建,窗口的元素在运行之前是已知的,并且在运行期间不会改变。
那么有没有更好的方法来做到这一点?
编辑:澄清一下:我只想创建很多相似但不相等的对象(它们内部可以有不同的方法和变量),但我不知道为每个对象创建一个新类是否更好(版本 1)或通过拥有一个虚拟对象并在之后添加单个功能来创建对象(版本 2)。