如何避免使用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)
该变量现在可以在任何可以访问self
或stream
的地方访问。因此,在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()