Здравствуйте, я написал код для получения данных с помощью pySerial, как показано ниже.
Мой класс зависит от серийного класса, который не соответствует правилу «свободной связи».
Должен ли я использовать интерфейс для развязки своего класса?
Большое спасибо за инструкцию.Каков правильный способ «развязать связь» в python?
import serial
class ArduinoConnect:
def __init__(self):
pass
def serial_connect(self, serial_port, serial_baudrate):
self._serial_port = serial_port
try:
self.ser = serial.Serial(
port=self._serial_port,
baudrate=serial_baudrate,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
)
except serial.serialutil.SerialException, e:
print str(e)
def serial_disconnect(self):
self.ser.close()
def get_quaternion(self, number_of_data=50):
buff = []
self.ser.write('q')
self.ser.write(chr(number_of_data))
for j in range(number_of_data):
in_string = self.ser.readline()
buff_line = in_string.split(",")
buff_line.pop()
buff_line = self.hex_to_quaternion(buff_line)
buff.append(list(buff_line))
return buff
def hex_to_quaternion(self, list_of_hex=None):
#......
pass
arduino = ArduinoConnect()
arduino.serial_connect(serial_port="COM5", serial_baudrate=115200)
print arduino.get_quaternion()
arduino.serial_disconnect()
Я настроил свой код в соответствии с рекомендациями.
DI помогает отделить последовательный процесс, а заводский метод помогает инкапсулировать процесс DI.
Есть ли что-нибудь еще, что я мог бы сделать, чтобы встретить правило «свободной связи»?
Спасибо за помощь.
import serial
class ArduinoConnect:
def __init__(self, serial_to_arduino):
self._serial_to_arduino = serial_to_arduino
def get_quaternion(self, number_of_data=50):
buff = []
self._serial_to_arduino.write('q')
self._serial_to_arduino.write(chr(number_of_data))
for j in range(number_of_data):
in_string = self._serial_to_arduino.readline()
buff_line = in_string.split(",")
buff_line.pop()
buff_line = self.hex_to_quaternion(buff_line)
buff.append(list(buff_line))
return buff
def hex_to_quaternion(self, list_of_hex):
......
def __getattr__(self, attr):
return getattr(self._serial_to_arduino, attr)
class SerialToArduino:
def __init__(self):
pass
def serial_connect(self, serial_port="COM5", serial_baudrate=115200):
self._serial_port = serial_port
try:
self.ser = serial.Serial(
port=self._serial_port,
baudrate=serial_baudrate,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
)
except serial.serialutil.SerialException, e:
print str(e)
def serial_disconnect(self):
self.ser.close()
def readline(self):
return self.ser.readline()
def write(self, data):
self.ser.write(data=data)
def get_ArduinoConnect():
'factory method'
return ArduinoConnect(serial_to_arduino=SerialToArduino())
arduino = get_ArduinoConnect()
arduino.serial_connect(serial_port="COM5", serial_baudrate=115200)
print arduino.get_quaternion()
arduino.serial_disconnect()
Можете ли вы подробнее остановиться на 1? –
Обновлен ответ, так как раздел комментариев слишком мал для него –