Нужна помощь в создании иерархии классов в Python - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть иерархия данных, которую я хотел бы построить, используя классы вместо жесткого кодирования. Структура выглядит следующим образом:

  1. Единица (имеет имя, аббревиатуру, подсистемы [5 различных типов подсистем])

  2. Подсистема (имеет тип, блок-схему (фото), ParameterModel [20 различных наборов параметровМодель])

  3. ParameterModel (около 30 параметров, которые будут иметь [имя параметра, значение, единицы измерения и индекс модели])

Я не уверен, как это сделать с помощью классов, но что я До сих пор проделал определенную работу по созданию вложенных словарей.

{'Unit': {'Unit1': {'Subsystem': {'Generator': {Parameter: {'Name': param1, 'Value': 1, 'Units': 'seconds'}

, как это, но с 10-15 единицами и 5-6 подсистемами и примерно 30 параметрами на подсистему. Я знаю, что использование словарей - не лучший способ узнать об этом go, но я не могу понять структуру разделения классов или с чего начать построение структуры классов.

Я хочу иметь возможность создавать, считывать, обновлять и удалять параметры в построенном мной tkinter gui, а также экспортировать / импортировать эти системные параметры и выполнять на них вычисления. Я могу обрабатывать расчеты и импорт-экспорт, но мне нужно создать классы, которые будут строить эту структуру и иметь возможность ссылаться на каждую отдельную единицу / подсистему / параметр / значение / и т.д. c

Я знаю, что это много но какой совет? Я изучал фабричные и абстрактные фабричные шаблоны в надежде выяснить, как создать структуру кода, но безрезультатно. У меня есть опыт работы с Matlab, Visual Basi c, C ++ и различными проектами Arduio, поэтому я знаю большинство программ Basi c, но эту структуру класса наследования я не могу понять, как сделать это абстрактным способом без жесткого кодирования каждого параметра с гигантские имена, такие как Unit1_Generator_parameterName_parameter = ____, и я действительно не хочу этого делать.

Спасибо, -A

РЕДАКТИРОВАТЬ: Вот один способ, которым я сделал реализацию, используя словарь, но я хотел бы сделать это, используя класс, который может взять список и собрать кучу пустых атрибутов, и они могут быть редактируемыми / вызываемыми, как правило, как setParamValue (unit, susystem, param), где я могу передать единицу подсистеме, а затем параметр, такой как 'Td', и затем иметь возможность изменить значение ключа, значение пара в этой иерархии.

def create_keys(list):
dict = {key: None for key in list}
return dict


unit_list = ['FL','ES','NN','SF','CC','HD','ND','TH'] #unit abbreviation
sub_list = ['Gen','Gov','Exc','PSS','Rel','BlkD']
params_GENROU = ["T'do","T''do","T'qo","T''qo",'H','D','Xd','Xq',"Xd'","Xq'","X''d=X''q",'Xl','S(1.0)','S(1.2)','Ra']   #parameter names

dict = create_keys(unit_list)

for key in dict:
    dict[key] = create_keys(sub_list)
    dict[key]['Gen'] = create_keys(params_GENROU)

и внутри каждого диктанта [юнит] [Gen] [ParamNames] должен быть дикт, содержащий значение, единицы (секунды, градусы и т. Д. c), описание и CON (# в основном в индексе) для другой программы мы используем)

...