我的实验室很快收到了一些新的装备,我在写我自己的MODBUS脚本来自动测试过程。到目前为止,这是我必须保持有限编程能力的最复杂的任务。继承和修改__init __()方法
不是从头开始编写一个新的类来管理命令的,我想使一个类EZTcomm
从bytearray
继承了它的功能,并添加EZTcomm.crc
属性来存储循环冗余校验。
阅读this question和docs.python.org后,我还是真搞不清楚如何做到这一点。看来,如果我想在所有的修改__init__()
方法在我的新的类,然后我需要显式调用bytearray.__init__()
第一,但我不知道如何来传递参数在EZTcomm
调用bytearray.__init__()
,我也不知道该怎么使用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)
这是望其项背工作,我希望它的方式?我应该做什么不同?
听起来你仍然对如何使用参数有点困惑。看到这里的文档:http://docs.python.org/2/tutorial/controlflow.html#more-on-defining-functions –