Схема естественного именования для динамического набора членов - PullRequest
1 голос
/ 31 января 2011

Желание, чтобы пользователь создал экземпляр класса, который представляет transseint, вместе с автоматическим доступом к элементу-члену для каждой представляемой переменной (до 200 переменных).Набор экземпляров класса переменных будет динамическим на основе входных данных на основе файлов, и желательно использовать предоставленные файлом имена переменных, чтобы создать коллекцию этих экземпляров переменных, которые доступны по естественной схеме именования.Фактически, класс переменных скрывает детали того, где хранятся данные и хранится независимая переменная (т. Е. Время).Следующий псевдокод выражает случайные строки, которые может выразить конечный пользователь.В некоторых случаях постобработка может быть гораздо более обширной.

tran1 = CTransient('TranData', ...)
Padj = tran1.pressPipe1 + 10  # add 10 bar to a pressure for conservatism
Tsat = TsatRoutine( tran1.tempPipe1 )
MyPlotRoutine( tran1.tempPipe1, tran1.tempPipe2 )

, где имена pressPipeX и tempPipeX, определенные во входных файлах данных, и соответствующие пустые векторы данных указаны во входном файле файла TranData иявляются экземплярами класса CVariable.

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

1 Ответ

2 голосов
/ 31 января 2011

Ваше описание того, что вы пытаетесь сделать, не совсем понятно, но автоматическое присвоение имен переменным что-то1, что-то2 и т. Д. Обычно плохая идея.Вместо этого используйте список:

transientvariables = []
transientvariables.append(makenewtransientvariable())
# ...
for tv in transientvariables:
    print tv

Редактировать: Хорошо, я думаю, я понимаю, к чему вы клоните, хотя ваше объяснение все еще не совсем легко прочитать.У вас есть коллекция каналов с временными рядами температуры и давления, записанными для каждого, верно?

Самый простой способ - использовать словарь:

transients["tempPipe1"]

Или вложенные словари:

transients["temp"]["Pipe1"]

Или вы можете переопределить метод класса __getattr__, чтобы он выглядел в словаре, и вы можете сделать:

transients.tempPipe1

Редактировать 2: Переопределение __getattr__ будет выглядеть примерно так:

def __getattr__(self, name):
    if name in self.varMap:
        return self.varMap[name]
    raise AttributeError
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...