Latest posts on Как сделать ассоциацию между конкретными классами? topichttps://python.su/forum/topic/41371/2022-03-31T16:33:42+03:00Общий :: Python для экспертов :: Как сделать ассоциацию между конкретными классами?
2022-03-31T16:33:42+03:00avshkol221234Спасибо, тоже думал про SQL, но в ГОСТ вроде нигде базы данных не упоминаются…<br/><br/>С ORM ранее сталкивался только в Джанго. Нашел вариант с библиотекой peewee - <a href="https://habr.com/ru/post/322086/">https://habr.com/ru/post/322086/</a><br/><br/>Получается, что на каждый экземпляр IdentifiedObject могут ссылаться от 0 до бесконечности экземпляров Name - условно у одного объекта может быть куча названий, не смотря на официальное название - атрибут Name… <br/><br/>Хм, либо в атрибут Name поместить список с экземплярами класса Name, которые на него ссылаются? <br/>
Общий :: Python для экспертов :: Как сделать ассоциацию между конкретными классами?
2022-03-31T15:23:45+03:00Rodegast221233ИХМО ты должен реализовать модель в виде SQL таблиц и реализовать связи (ассоциации) между ними. Если ты будешь использовать ORM, то сможешь определить эти таблицы в виде python-классов. <br/><br/>> Как вы понимаете “ассоциации классов”<br/><br/>У тебя же есть ссылка на ГОСТ Р 58651.1. Там дан ответ на этот вопрос.<blockquote>ассоциация: Связь между классами, определяющая смысловое взаимоотношение между ними.<br/></blockquote>
Общий :: Python для экспертов :: Как сделать ассоциацию между конкретными классами?
2022-03-30T12:45:56+03:00avshkol221229Разбираю ГОСТ, который описывает классы для построения моделей в электроэнергетике.<br/><a href="https://docs.cntd.ru/document/1200169330">ГОСТ Р 58651.2-2019</a><br/><br/>П. 4.1. описывает классы, ключевой из которых IdentifiedObject (из него наследуется большинство классов)<br/>П. 4.2. описывает дополнительный класс Name<br/><br/>Создадим их, используя атрибуты, описанные в п. 5.1 :<br/><br/><div class="code"><pre> <span class="kn">import</span> <span class="nn">uuid</span>
<span class="k">class</span> <span class="nc">IdentifiedObject</span><span class="p">:</span>
<span class="sd">'''Идентифицирующий класс - обеспечивает идентификацию и</span>
<span class="sd"> набор наименований для наследуемых классов</span>
<span class="sd"> </span>
<span class="sd"> name - Наименование объекта информационной модели</span>
<span class="sd"> Если объект модели имеет диспетчерское наименование,</span>
<span class="sd"> то указывается диспетчерское наименование.</span>
<span class="sd"> </span>
<span class="sd"> aliasName - Дополнительное наименование идентифицируемого объекта</span>
<span class="sd"> </span>
<span class="sd"> description - Описание объекта информационной модели</span>
<span class="sd"> </span>
<span class="sd"> mRID - Глобальный уникальный идентификатор объекта информационной модели</span>
<span class="sd"> Тип представляет собой 16-байтный (128-битный) номер в шестнадцатеричной системе счисления,</span>
<span class="sd"> как определено в ГОСТ Р ИСО/МЭК 9834-8.</span>
<span class="sd"> '''</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">aliasName</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">description</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">mRID</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
<span class="bp">self</span><span class="o">.</span><span class="n">aliasName</span> <span class="o">=</span> <span class="n">aliasName</span>
<span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="o">=</span> <span class="n">description</span>
<span class="bp">self</span><span class="o">.</span><span class="n">mRID</span> <span class="o">=</span> <span class="n">uuid</span><span class="o">.</span><span class="n">UUID</span><span class="p">()</span> <span class="k">if</span> <span class="n">mRID</span> <span class="o">==</span> <span class="bp">None</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">mRID</span> <span class="o">=</span> <span class="n">mRID</span>
<span class="k">class</span> <span class="nc">Name</span><span class="p">:</span>
<span class="sd">'''Типизированное дополнительное наименование '''</span>
<span class="k">pass</span>
</pre></div><br/>Теперь смотрим п. 5.2 Базисный профиль информационной модели должен включать в себя перечень ассоциаций, приведенный в таблице 4. Например, первая строка, связывает два наших класса:<br/><br/>Смысловое назначение ассоциации - Набор типизированных наименований<br/>Начальный класс - IdentifiedObject<br/>Конечный класс - Name<br/>Имя ассоциации (англ.) - Names<br/>Множественность - 0..*<br/><br/><strong>Вопрос:<br/>Как вы понимаете “ассоциации классов”, как бы вы их реализовали на конкретных классах IdentifiedObject и Name?</strong><br/><br/>(p.s. в таблице 4 таких ассоциаций между этими классами описано несколько…)<br/>