python程序结构和全局变量的使用

时间:2013-07-17 20:01:46

标签: python user-interface pyqt

我已完成一项程序,该程序执行以下操作:

1)实时从串口读取格式化数据(一系列数字和相关标签) 2)对数据进行轻微操作。 3)使用pyqt在gui中实时绘制数据。 4)更新gui中的数据统计。 5)允许在收集停止后对数据进行后期分析。

在主窗口中调用两个对话框(单独的类),以便在绘图和统计中选择某些首选项。

我的问题如下:现在我的数据被读入并声明为附加到的几个全局变量,因为数据以每秒20x左右的速度传输 - 数值的2d列表和1d的列表各种相关的文本值。创建一个用于存储数据及其各种属性的类,然后使用此数据类的实例来完成其他所有事情(例如绘制数据和与之关联的统计信息)会不会更好?

我有一种预感,答案是肯定的,但如果这是最好的前进方向,我需要一些关于如何实现这一目标的指导。例如,每个数据都是数据类的新实例吗?我会将它们一个接一个地传递给其他类和方法的实例列表吗?如何最优雅地完成传球?

如果我不够具体,请告诉我其他哪些信息可以帮助我找到一个好的答案。

1 个答案:

答案 0 :(得分:2)

一个相当不错的经验法则是,如果你正在做的事情需要超过20行代码,那么值得考虑使用面向对象的设计而不是全局变量,如果你得到100行,你应该已经在使用类了。纯粹主义者可能会说永远不会使用全局,但恕我直言的简单线性脚本可能有点过分。

请注意,您可能会得到很多答案,表达您尚未表达的恐惧。

有一些非常好的,(其中一些是免费的),书籍介绍你在python中的面向对象编程快速谷歌应该提供你需要的帮助。

在答案中添加了评论以保留它们:

所以在741行,我将把它作为对OOP的肯定:)所以特别是在数据类上。在数据字符串进入时,每秒20x创建一个新的数据类实例是正确的,还是更适合附加到类的现有实例的某些数据列表?或者两种方式都没有明确的偏好? - TimoB

我会追加/扩展您现有的实例。 - seth

我想我现在看到了光明。我可以在按下“开始数据”按钮时实例化数据类,并在执行串行读取的后续线程中附加到该实例。谢谢! - TimoB