1

我转换了这个“非面向对象”的代码:

from Tkinter import *

root = Tk()
frame = Frame(root)
frame.pack()

bottomframe = Frame(root)
bottomframe.pack( side = BOTTOM )

redbutton = Button(frame, text="Red", fg="red")
redbutton.pack( side = LEFT)

bluebutton = Button(frame, text="Blue", fg="blue")
bluebutton.pack( side = LEFT )

root.mainloop()

到这个面向对象的代码:

from Tkinter import *
class Window(Frame):
    def __init__(self, parent = None):
       Frame.__init__(self, parent)
       self.pack()

       widget=Button(self,text="Red", fg = "red")
       widget.pack(side = LEFT)

       widget = Button(self, text ="Blue", fg = "blue")
       widget.pack(side = RIGHT)
if __name__== '__main__':
    Window().mainloop()

这两个片段都会在屏幕上弹出一个简单的窗口。我的问题是,在这种情况下,面向对象编程(即使用类)有什么好处?

如果我想生成 3 个其他窗口(使用类),但更改了按钮颜色,我是否必须修改蓝图(即类)或者在调用类实例时有什么办法吗?

4

3 回答 3

5

想想如果你有两个窗口都带有红色按钮和蓝色按钮会发生什么。你能明白为什么将它们封装在一个对象中会有所帮助吗?

于 2013-08-21T11:47:59.667 回答
4

“面向对象编程”不仅仅是使用class关键字编写程序程序。当你有一个类时,它不是 OOP,它只被调用一次,并且该类有一个方法,即__init__(). “在这种情况下”没有任何好处,而且您并不是真的在做“面向对象的编程”。

OOP 的好处——做得好——通常是众所周知的,但在我看来,主要的好处是降低代码复杂性。

于 2013-08-21T11:55:47.397 回答
1

以下可能是类结构的用例

from Tkinter import *
class Window(Frame):
    def __init__(self, parent = None):
       Frame.__init__(self, parent)
       self.pack()

    def createButton(self, text, fg, side):
        widget = Button(self, text = text, fg = fg)
        widget.pack(side = side)

if __name__== '__main__':
    _win = Window()
    _win.createButton("Red", "red", LEFT)
    _win.createButton("Blue", "blue", RIGHT)
    _win.mainloop()

但这是一个简单而简短的代码。对于长而复杂的代码,它可以帮助您定义类变量并从类中的任何函数访问它们。您也可以创建可重用的函数,并像您的示例中那样摆脱重复的行。

最好阅读有关 OOP 的更多信息,因为在这里介绍所有方面并不简单。

于 2013-08-21T12:23:03.623 回答