Преобразование иерархии объектов из MATLAB в Python - PullRequest
0 голосов
/ 14 января 2019

Я конвертирую скрипт MATLAB в python. Сценарий MATLAB использует некую иерархию объектов для различных входных переменных, как в:

parameterA.subparameter1= A1;
parameterA.subparameter2= A2;

parameterB.subparameter1= B1;
parameterB.subparameter2= B2;

Где A1,A2,B1,B2 может быть строками и числами. Я хочу преобразовать это в Python, и я использовал

parameterA.subparameter1= A1
parameterA.subparameter2= A2

parameterB.subparameter1= B1
parameterB.subparameter2= B2

Теперь я получаю сообщение об ошибке:

NameError: имя 'parameterA' не определено

Я попытался инициализировать их, используя либо parameterA,parameterB=[],[], что не очень хорошо, потому что мне нужны объекты, а не список, или parameterA,parameterB=set(),set() в соответствии с в этом посте , а также какое-то другое решение.

Это вообще правильный подход? Как мне инициализировать эту структуру? Есть ли лучший способ сделать это?

Ответы [ 2 ]

0 голосов
/ 14 января 2019

В документации для Python Engine для MATLAB вы можете найти неоднозначность классов в MATLAB и классов в Python.

Если вы хотите разместить документацию, вам следует заменить структуры в MATLAB словарями на Python (например, Андрас Дик ответил ). Если вы хотите сохранить синтаксис для вызова структурных полей с помощью оператора точки, вы также можете определить классы в Python.

class parameterA: pass
class parameterB: pass

parameterA.subparameter1= A1
parameterA.subparameter2= A2

parameterB.subparameter1= B1
parameterB.subparameter2= B2

... Но я бы тоже порекомендовал словари.

0 голосов
/ 14 января 2019

Я настоятельно рекомендую вам использовать dict s. Это эффективные и универсальные встроенные объекты в Python.

parameterA  = {'subparameter1': A1} # definition
parameterA['subparameter2'] = A2 # update/assignment

parameterB = {'subparameter1': B1, 'subparameter2': B2}

Как вы можете видеть, вы можете получить доступ и изменить значения, используя квадратные скобки. Если вы действительно настаиваете на использовании поиска атрибутов, вы можете использовать types.SimpleNamespace:

from types import SimpleNamespace

parameterA = SimpleNamespace(subparameter1=A1)
parameterA.subparameter2 = A2

parameterB = SimpleNamespace(subparameter1=B1, subparameter2=B2)

Основная причина, по которой я придерживаюсь диктовок, - это простота динамического доступа к ключам. Используйте SimpleNamespace или что-то подобное, только если вы никогда не обращаетесь к атрибутам программно, потому что ваши объекты больше похожи на инструмент для группировки переменных вместе. Вы по-прежнему можете обращаться к атрибутам программно, но это уродливее (и менее идиоматично), чем dict поиск элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...