从self和init工作区移动到更简化的工作区



如何避免使用self、init、try和except。为了提供一些背景,这是一个实时生物传感器流的代码。然而,我正在努力使代码变笨。代码不断更新,然后在matplotlib中绘制代码。

我想去掉所有这些方法,因为逻辑和代码很难处理。

主要问题:这个代码的过程是什么?函数的顺序是什么?

虽然我个人推荐类,因为它们可以非常容易地存储数据并将数据从一个函数传输到另一个函数,但确实可以在类之外重写代码。您需要删除__init__函数的内容并将它们移动到主缩进级别;自我"从你看到的任何地方,并将必要的变量输入到每个函数而不是自身,即update_vars(self)将变成def updateVars(board, display_window, board_channel)

与其这样做,我建议你试着学习课堂是如何运作的。首先,初始化类时,在stream = CytonStream()的情况下,调用__init__函数来初始化CythonStream对象的实例。在CytonStream方法内部,self引用类的此实例。类内的self引用在功能上与类外的stream引用相同,因为如果调用stream.updateVars()stream将以与调用CytonStream.updateVars(stream)相同的方式传递到updateVars

__init__中,您会注意到属性已分配给类实例self:

self.display_window = DataFilter.get_nearest_power_of_two(500)

该变量现在可以在任何可以访问selfstream的地方访问。因此,在updateVars中,您可以访问此属性。

all_data = self.board.get_current_board_data(self.display_window)

如果你做stream.display_window,它会给你同样的属性。

就代码中发生的情况而言,当您运行stream = CytonStream()时,这将调用CytonStream.__init__()。在该功能中,

self.ani = matplotlib.animation.FuncAnimation(self.fig, self.updateFig,
interval=5, blit=True)

将创建一个调用self.updateFig()的动画,该动画将调用self.updateVars()

最新更新