PS: 靠了...居然漏翻了一篇...补在这儿吧...
*使用class来组织*
在这个程序中, 我们用类来组织一个tkinter程序.
在这个程序中, 我们来添加一个类MyApp, 再把之前程序中的一些代码挪到构造函数(__init__)里. 在这个程序的重构版本中, 我们主要干了3件事:
(1)
在代码中, 我们先定义一个类(MyApp), 它封装了程序的界面组成部分. 它定义了程序最后长啥样, 同时也完成了我们想干的事. 所有这些咱都丢__init__里. (1a)
(2)
当程序运行时, 第一件事就是创建一个类的实例. 就是下面这句:
myapp = MyApp(root)
在这儿注意类名是"MyApp"(注意首字母), 而实例名我们用的是"myapp"(首字母没大写).
另外这句将root传给了MyApp的__init__方法. 构造函数会将它命名为"myParent". (1a)
(3)
最后, 咱运行root的mainloop.
*为啥用类来组织你的程序*
其中一个原因是因为它可以更容易的控制你的程序. 一个程序按类来组织可能 -- 特别是大程序 -- 比不用要更容易理解.
另外一个很重要的原因是用类来组织可以避免使用全局变量. 最后, 随着程序变大, 你很可以希望在几个事件处理器中来共享一些数据. 一种方法是使用全局变量, 但这样也太挫了. 一个更好的办法封装成类, 并用实例(也就是"self."这个变量)来访问. 在这个系列的后面, 我们会再来讲这个问题.
*啥时候用类呢*
为了解释为啥用类来组织程序以及如何推广到其他情况下, 我们已经在前面从概念上讲了一下. 但在实际的开发过程中, 你可能会不这么干.
有很多情况, 一个tkinter程序都是从一个小脚本开始的. 所有这些程序都如我们之前写的那些一样, 都是不组织的. 当你有一个新点子时, 你会去扩充原有的代码. 过了一段时间, 你就会有一大坨代码. 你可能一开始只用一些全局变量, 但这时估计就会变成一大坨全局变量. 代码也开始变得难于理解和修改. 当你有这种感觉时, 说明你应该重构一下你的程序了, 用类来重构.
另外, 当你适应了类, 并且对你的程序有了一个最终的构思后, 你很可能就会从头开始用类重写一遍.
但另外(靠, 另外的另外, 绕回来了?), 在开发早期你经常会用不知如何用类来最好的组织代码的感觉 -- 其实还是因为你对要解决的问题没有一个清晰的认识. 过早的使用类来组织很可能会导致代码零乱, 妨碍理解, 最终导致更多的重构.
所以这个完全是凭个人的品味和经验来的. 只干你觉得不错的, 并且 -- 不管你怎么做 -- 在你觉得有必要时不要害怕重构.
*代码示例*
当程序运行时, 它看上去与前一个程序非常像. 其实确实没加啥功能, 只是把代码重新组织了一下而已.