Я создаю скрипт для измерений, который я хотел бы привести в порядок для удобства чтения конечными пользователями. Скрипт общается со всеми видами оборудования, которые загружаются как отдельные классы. Для целей этого вопроса я создал фиктивный инструмент, который сохраняется в отдельном файле (как и в случае с реальной программой, которую я создаю):
instruA.py
class instruA:
def msg(self):
return 123
Поскольку основной сценарий измерения - файл, который изменяет конечный пользователь - должен быть максимально простым, я создал «лабораторный» модуль, в котором размещаются команды измерения:
lab.py
import sys
meas_dict = {}
def str_to_class(classname):
return getattr(sys.modules[__name__], classname)
Пользователь может изменить только основной сценарий (показанный ниже), чтобы добавить все устройства, которые он хочет использовать для измерений, после чего сценарии принимают заботиться об остальном. Сценарий для этого вопроса выглядит следующим образом:
main.py
from instruA import *
a = instruA()
# Create a list of devices that needs to be measured
# (typically: 'a.msg, foo.bar, b.somevariable')
meas_dict = 'a.msg'
# Load lab software
import lab
lab.meas_dict = meas_dict
# TEST LINE OF CODE (GIVES ERROR):
lab.str_to_class('a')
Я ожидаю, что сценарий укажет мне на нужный объект, то есть <instruA.instruA at 0x1b2ba7d1e80>
, Вместо этого он дает module 'lab2' has no attribute 'a'
.
Как я могу убедиться, что мой lab.py имеет доступ к экземплярам моего класса?