【发布时间】:2014-03-13 19:40:02
【问题描述】:
我的实验室很快就会收到一些新设备,我正在编写自己的 modbus 脚本来自动化测试过程。到目前为止,这是我不得不用我有限的编程能力来应对的最复杂的任务。
我不想从头开始编写一个新类来管理命令,而是创建一个类EZTcomm,它从bytearray 继承其功能,并添加一个EZTcomm.crc 属性来存储循环冗余校验和。
在阅读了this question 和 docs.python.org 之后,我仍然对如何做到这一点感到困惑。似乎如果我想在我的新类中修改 __init__() 方法,那么我需要先显式调用 bytearray.__init__(),但我不知道如何将 EZTcomm 调用中的参数传递给 @ 987654329@,我也不知道如何使用bytearray.__init__()调用中的参数作为变量来计算CRC。
这是我迄今为止所写的:
class EZTcomm(bytearray):
def __init__(self, *args, **kwargs):
bytearray.__init__(self, *args, **kwargs)
self.check = crc(args)
def CRC(bytearray_in):
'''Calculates a Cyclical Redundancy Checksum (CRC16).'''
crc = 0xFFFF
for work_byte in bytearray_in:
crc ^= work_byte
n = 0
while n in range(8):
if (crc & 0x0001):
crc >>= 1
crc ^= 0xA001
else:
crc >>= 1
n += 1
return crc
############
test = EZTcomm([0x01,0x03,0x00,0x23,0x00,0x02])
print(test)
print(test.check)
这是否接近我想要的工作方式?我应该做些什么不同的事情?
【问题讨论】:
-
听起来您对如何使用参数仍然有些困惑。在此处查看文档:docs.python.org/2/tutorial/…
标签: python inheritance python-3.x modbus crc16