Я думаю, что это будет наиболее легко продемонстрировано на примере, но вопрос является общим. Скажем, я использую библиотеку PyVISA, которая взаимодействует с устройствами GPIB с моей программой. Я создал класс питона для каждого инструмента, поэтому для питания, я мог бы что-то вроде этого:Программирование с подключенным оборудованием
import visa
class PowerSupply:
def __init__(self):
rm = visa.ResourceManager()
self.ps = rm.open_resource('GPIB0::12::INSTR')
def getVoltage(self):
return self.ps.ask('VOLT?')
def setVoltage(self,v):
self.ps.write('VOLT '+str(v))
...
ps = PowerSupply()
ps.setVoltage(10)
К сожалению, есть вероятность того, что функция rm.open_resource
может не работать, или может вернуться None
если устройство не существует на этом адресе (в моем коде я фактически написал функцию, которая сделала это вместо этого). Мой вопрос: какова наилучшая практика для кодирования такого класса, как PowerSupply
? Можно было бы написать исключения в каждый метод, который проверяет, существует ли self.ps
/не None
, но кажется, что должен быть лучший способ. Здесь?!
Несомненно '__init__' должен потерпеть неудачу в этом случае, выбросив ошибку? – jonrsharpe
для дальнейшего комментария jon ... должно быть задание вызывающего абонента для управления зависимостью 'try: ps = PowerSupply(); за исключением: do_something_else() '... и init, безусловно, должен вызвать ошибку о том, что nopowerupply не найден –
@jonrsharpe: в вопросе говорится, что' open_resource' может возвращать 'None'. Таким образом, нет, '__init__' не потерпит неудачу в этом случае. Но исправление заключается в том, что _make_ в этом случае не работает. Добавьте 'if not self.ps: raise SomeException ('не удалось открыть ресурс')' или тому подобное. – abarnert