我对 Python 编程非常陌生,目前正在开发一个小型 PyGTK 应用程序。
在搜索和阅读各种在线教程后,我对定义主应用程序的类有点困惑。我见过的两种不同的方法是:
import pygtk
pygtk.require('2.0')
import gtk
class Base:
def __init__(self):
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.show()
def main(self):
gtk.main()
print __name__
if __name__ == "__main__":
base = Base()
base.main()
源代码:http://www.pygtk.org/pygtk2tutorial/ch-GettingStarted.html
...或者...
import gtk
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.connect("destroy", gtk.main_quit)
self.set_size_request(250, 150)
self.set_position(gtk.WIN_POS_CENTER)
self.show()
PyApp()
gtk.main()
源代码:http://zetcode.com/gui/pygtk/firststeps/
我理解一个类扩展另一个类/使用它作为基础对象的原理,但我不清楚这里一种方法相对于另一种方法的好处,有人可以解释一下吗?
最佳答案
在 pygtk 中,您可以从任何小部件继承,但在这种情况下,第二个实现比第一个实现具有优势。 OOP 编程中的一个重要概念是封装,它指的是如何访问类属性/属性和方法。在这两种代码的实现上,窗口是公共(public)的,程序员可以直接访问该窗口。 OOP编程的出现是因为我们与对象的交互很容易,在第一个实现中,如果你想获取窗口实例的标题,你必须输入:
base.window.get_title()
但是第二次你必须输入:
PyApp().get_title()
您还可以将自定义属性、属性和方法附加到您需要的第二个实现中,或者覆盖从父级继承的这些内容,例如,您可以将 main 方法添加到 PyApp 中,如下所示:
import gtk
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.connect("destroy", gtk.main_quit)
self.set_size_request(250, 150)
self.set_position(gtk.WIN_POS_CENTER)
self.show()
def main(self):
gtk.main()
app = PyApp()
app.main()
但是如果您想由其他程序员共享此类而不直接访问窗口,那么第一个实现当然更好,再加上类似于以下代码的微小更改:
import pygtk
pygtk.require('2.0')
import gtk
class Base:
def __init__(self):
self.__window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.__window.show()
def main(self):
gtk.main()
print __name__
if __name__ == "__main__":
base = Base()
base.main()
在任何属性、属性和方法将其范围更改为私有(private)之前,加双下划线。
关于python - PyGTK 应用程序的主类是否应该扩展 Gtk.Window?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27843676/