“ bafang-python”软件包中使用的Python“ Magic”方法是什么?

时间:2018-08-10 17:32:50

标签: python

我一直在努力使这段代码起作用:

https://github.com/philippsandhaus/bafang-python

有一个Magic()方法让我感到困惑,因为Python也有一些魔术方法。我也是Python的初学者。

问题出在这部分:

connect_cmd = Struct('connect',
  Magic('\x11\x51\x04\xB0\x05')
)

这是串行消息,但是Magic()是什么,如何使它起作用?

3 个答案:

答案 0 :(得分:3)

construct.Magicconstruct.Const的旧名称。 (该代码可能是为2.8之前的construct库版本编写的。)

请参阅https://github.com/construct/construct/blob/master/docs/transition28.rst,其中描述了一系列重命名:

  

Magic被设为Const


可以从the documentation推断出名称的原因(加重):

  

常量-   数据中必须存在并与给定值匹配的常数值。如果该值不匹配,则会引发ConstError。 可用于所谓的魔术数字,签名,声明正确的协议版本等。

答案 1 :(得分:0)

python中的

“魔术”方法是提供运算符重载的方法。参照这些方法,术语“魔术”并未出现在python语言中,并且许多用户不愿使用该术语,因为它暗示了不可理解性。如果需要,请参见this tutorial,以获取有关这些信息的更多信息。

您在链接中引用的Magic函数(或可能的类)未在该存储库的上下文中定义,因此无法说出它对所提供信息的作用。可能需要进一步研究提交者的其他存储库,才能打开他从中导入的construct模块。

编辑:显然有一个名为construct的库,它对于python用户的子集是众所周知的,但您引用的作者未明确引用。叹。 https://github.com/MostAwesomeDude/construct

答案 2 :(得分:0)

我是github存储库的原始作者。我将代码更新为当前的Construct版本2.9,添加了requirements.txt,还删除了import *。因此,现在应该更清楚了,它应该对您有用。

 connect_cmd = Struct('connect',
   Magic('\x11\x51\x04\xB0\x05')
 )

现在已经changed

connect_cmd = Struct(
    'connect_cmd' / Const(b"\x11\x51\x04\xB0\x05")
)