Raf*_*ler 5 python oop scope abstraction initialization
我正在编写一个带有使用Tkinter模块构建的GUI的Python程序.我正在使用一个类来定义GUI,因为它可以更容易地将命令传递给按钮,并使整个事情更容易理解.
我的GUI的实际初始化需要大约150行代码.为了使这更容易理解,我写了__init__这样的函数:
def __init__(self, root):
self.root = root
self._init_menu()
self._init_connectbar()
self._init_usertree()
self._init_remotetree()
self._init_bottom()
Run Code Online (Sandbox Code Playgroud)
where _init_menu(),_init_connectbar()等等进行所有初始化工作.这使我的代码更容易遵循,并防止__init__变得太大.
但是,这会产生范围问题.由于我定义的Entry小部件_init_connectbar()位于函数作用域中而不是类属性,因此我无法在类中的其他方法中引用它.
我可以通过执行大部分初始化来消除这些问题__init__,但是我将失去我用第一种方法获得的抽象.
我应该扩展__init__,还是找到另一种方法将小部件带入类范围?
在实例变量中存储其中一些窗口小部件引用或返回它们(一个最小的设置提示你;你想要Reduce Coupling)并将它们存储在局部变量中,__init__然后将相关的那些作为参数传递给后续的构造助手.后者更干净,但要求事物足够分离,以便您可以创建使其成为可能的排序.
为什么不创建需要引用的小部件,实例变量。这是我经常做的事情,而且似乎是一种很常见的方法。
例如
self.some_widget
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
839 次 |
| 最近记录: |