Micropython继承失败
Micropython inheritance fails
我正在尝试通过 I2C 将 PyBoard(我不确定硬件版本,但它是 运行 uPython 1.9.3)连接到基于 SSD1306 的 LED 显示器。
物理连接有效,我可以建立 I2C 连接,查看设备,并验证它在 I2C 连接上是否可读。
但是,我无法使用 uPython Github 中的 ssd1306
模块。我可以很好地导入模块,但 SSD1306
class 不会初始化。失败的代码是这样的:
class SSD1306(framebuf.FrameBuffer):
def __init__(self, width, height, external_vcc):
self.width = width
self.height = height
self.external_vcc = external_vcc
self.pages = self.height // 8
self.buffer = bytearray(self.pages * self.width)
super().__init__(self.buffer, self.width, self.height, framebuf.MONO_VLSB)
self.init_display()
错误信息总是
TypeError: function missing 1 required positional arguments
这似乎是虚假的(我已经确定传递了所需的 width
、height
和 external_vcc
。我很确定问题出在super()
调用——但它是 uPython,因此在初始化程序中进行打印调试似乎不起作用。
我在几个地方读到过,uPython 在调用闭包时往往会发出关于缺少参数的错误消息,但这只是模糊地类似于那个。为了以防万一,我尝试在 super().__init__()
调用中添加一个明确的 self ,但这也不起作用。所以我有点卡住了,欢迎就正确的下一步调试提出建议。
看来问题是版本不匹配。至少,在 uPython github 上这个文件的前一个版本中,class 没有继承自 FrameBuffer
而是维护了一个内部的。代码中有这样的注释:
# Provide methods for accessing FrameBuffer graphics primitives. This is a
# workround because inheritance from a native class is currently unsupported.
# http://docs.micropython.org/en/latest/pyboard/library/framebuf.html
所以,我认为问题是 1.9.3 板和 1.9.4 驱动程序副本之间的版本不匹配。将其回滚到 1.9.3 代码有效。
我正在尝试通过 I2C 将 PyBoard(我不确定硬件版本,但它是 运行 uPython 1.9.3)连接到基于 SSD1306 的 LED 显示器。
物理连接有效,我可以建立 I2C 连接,查看设备,并验证它在 I2C 连接上是否可读。
但是,我无法使用 uPython Github 中的 ssd1306
模块。我可以很好地导入模块,但 SSD1306
class 不会初始化。失败的代码是这样的:
class SSD1306(framebuf.FrameBuffer):
def __init__(self, width, height, external_vcc):
self.width = width
self.height = height
self.external_vcc = external_vcc
self.pages = self.height // 8
self.buffer = bytearray(self.pages * self.width)
super().__init__(self.buffer, self.width, self.height, framebuf.MONO_VLSB)
self.init_display()
错误信息总是
TypeError: function missing 1 required positional arguments
这似乎是虚假的(我已经确定传递了所需的 width
、height
和 external_vcc
。我很确定问题出在super()
调用——但它是 uPython,因此在初始化程序中进行打印调试似乎不起作用。
我在几个地方读到过,uPython 在调用闭包时往往会发出关于缺少参数的错误消息,但这只是模糊地类似于那个。为了以防万一,我尝试在 super().__init__()
调用中添加一个明确的 self ,但这也不起作用。所以我有点卡住了,欢迎就正确的下一步调试提出建议。
看来问题是版本不匹配。至少,在 uPython github 上这个文件的前一个版本中,class 没有继承自 FrameBuffer
而是维护了一个内部的。代码中有这样的注释:
# Provide methods for accessing FrameBuffer graphics primitives. This is a
# workround because inheritance from a native class is currently unsupported.
# http://docs.micropython.org/en/latest/pyboard/library/framebuf.html
所以,我认为问题是 1.9.3 板和 1.9.4 驱动程序副本之间的版本不匹配。将其回滚到 1.9.3 代码有效。