我的實驗室很快收到了一些新的裝備,我在寫我自己的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 –