我一直在努力使这段代码起作用:
https://github.com/philippsandhaus/bafang-python
有一个Magic()
方法让我感到困惑,因为Python也有一些魔术方法。我也是Python的初学者。
问题出在这部分:
connect_cmd = Struct('connect',
Magic('\x11\x51\x04\xB0\x05')
)
这是串行消息,但是Magic()
是什么,如何使它起作用?
答案 0 :(得分:3)
construct.Magic
是construct.Const
的旧名称。 (该代码可能是为2.8之前的construct
库版本编写的。)
请参阅https://github.com/construct/construct/blob/master/docs/transition28.rst,其中描述了一系列重命名:
Magic
被设为Const
可以从the documentation推断出名称的原因(加重):
常量- 数据中必须存在并与给定值匹配的常数值。如果该值不匹配,则会引发ConstError。 可用于所谓的魔术数字,签名,声明正确的协议版本等。
答案 1 :(得分:0)
“魔术”方法是提供运算符重载的方法。参照这些方法,术语“魔术”并未出现在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")
)