Найти - Пользователи
Полная версия: Как сделать ассоциацию между конкретными классами?
Начало » Python для экспертов » Как сделать ассоциацию между конкретными классами?
1
avshkol
Разбираю ГОСТ, который описывает классы для построения моделей в электроэнергетике.
ГОСТ Р 58651.2-2019

П. 4.1. описывает классы, ключевой из которых IdentifiedObject (из него наследуется большинство классов)
П. 4.2. описывает дополнительный класс Name

Создадим их, используя атрибуты, описанные в п. 5.1 :

 import uuid
 
class IdentifiedObject:
    '''Идентифицирующий класс - обеспечивает идентификацию и
    набор наименований для наследуемых классов
 
    name - Наименование объекта информационной модели
    Если объект модели имеет диспетчерское наименование,
    то указывается диспетчерское наименование.
 
    aliasName - Дополнительное наименование идентифицируемого объекта
 
    description - Описание объекта информационной модели
 
    mRID - Глобальный уникальный идентификатор объекта информационной модели
    Тип представляет собой 16-байтный (128-битный) номер в шестнадцатеричной системе счисления,
    как определено в ГОСТ Р ИСО/МЭК 9834-8.
    '''
    def __init__(self, name: str, aliasName=None, description=None, mRID=None):
        self.name = name
        self.aliasName = aliasName
        self.description = description
        self.mRID = uuid.UUID() if mRID == None else self.mRID = mRID
 
 
class Name:
    '''Типизированное дополнительное наименование '''
    pass

Теперь смотрим п. 5.2 Базисный профиль информационной модели должен включать в себя перечень ассоциаций, приведенный в таблице 4. Например, первая строка, связывает два наших класса:

Смысловое назначение ассоциации - Набор типизированных наименований
Начальный класс - IdentifiedObject
Конечный класс - Name
Имя ассоциации (англ.) - Names
Множественность - 0..*

Вопрос:
Как вы понимаете “ассоциации классов”, как бы вы их реализовали на конкретных классах IdentifiedObject и Name?


(p.s. в таблице 4 таких ассоциаций между этими классами описано несколько…)
Rodegast
ИХМО ты должен реализовать модель в виде SQL таблиц и реализовать связи (ассоциации) между ними. Если ты будешь использовать ORM, то сможешь определить эти таблицы в виде python-классов.

> Как вы понимаете “ассоциации классов”

У тебя же есть ссылка на ГОСТ Р 58651.1. Там дан ответ на этот вопрос.
ассоциация: Связь между классами, определяющая смысловое взаимоотношение между ними.
avshkol
Спасибо, тоже думал про SQL, но в ГОСТ вроде нигде базы данных не упоминаются…

С ORM ранее сталкивался только в Джанго. Нашел вариант с библиотекой peewee - https://habr.com/ru/post/322086/

Получается, что на каждый экземпляр IdentifiedObject могут ссылаться от 0 до бесконечности экземпляров Name - условно у одного объекта может быть куча названий, не смотря на официальное название - атрибут Name…

Хм, либо в атрибут Name поместить список с экземплярами класса Name, которые на него ссылаются?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB