1

我完成了一个程序,它执行以下操作:

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

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

我的问题如下:现在我的数据被读入并声明为几个全局变量,这些全局变量被附加到数据以每秒 20 倍左右的速度出现 - 数值的 2d 列表和各种相关文本的 1d 列表价值观。最好创建一个类来存储数据及其各种属性,然后使用该数据类的实例来完成其他所有事情——比如绘制数据和与之相关的统计数据?

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

如果我不够具体,请让我知道还有哪些其他信息可以帮助我得到一个好的答案。

4

1 回答 1

2

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

请注意,您可能会得到很多表达恐惧的答案,但您还没有。

有一些非常好的书籍(其中一些是免费的)向您介绍了 Python 中的面向对象编程,快速的 google 应该可以提供您需要的帮助。

在答案中添加了注释以保留它们:

因此,在 741 行,我将其视为对 OOP 的肯定:) 特别是在数据类上。当数据字符串进入时,以每秒 20 倍的速度创建数据类的新实例是否正确,或者附加到该类的现有实例的某些数据列表中是否更合适?还是两种方式都没有明确的偏好?– TimoB

我会附加/扩展您现有的实例。– 赛斯

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

于 2013-07-17T20:17:44.553 回答