Как получить имя переменной в массиве, которая будет использоваться как часть другого оператора? - PullRequest
0 голосов
/ 08 июня 2018

Я создавал новый сценарий, в котором я генерирую массив, содержащий список строк (g='g_o.DisplacementMultiplier_'+str(y+1), где y варьируется от 0 до 400).Позже это необходимо использовать для установки четырех свойств в стороннем программном обеспечении, но я вижу, что используемый мной синтаксис устанавливает свойства для переменной g, а не для g_o.DisplacementMultiplier_#).

В приложенииэто код:

import smtplib
import math
import time
import imp
import numpy as np
s_o,g_o=new_server
s_o.new()

# Geometry
Bench = 5 # Crest bench
Angle = 23
Height = 15.3

# Frequencies
fz=[]
Tmin=0.01
Tmax=4
Tstep=0.01
Ts = np.arange(Tmin, (Tmax+Tstep), Tstep)
fz = float(1)/Ts

# Calculate x-lenght of slope
dtot= Height / math.tan(math.pi*Angle/180)

# Calculate xmax
xmax = (2 * dtot)+ Bench

# Displacement
g_o.linedispl (0, 0, xmax, 0)
g_o.set(g_o.Line_1.LineDisplacement.Displacement_x, "Prescribed")
g_o.set(g_o.Line_1.LineDisplacement.Displacement_y, "Fixed")
g_o.set(g_o.Line_1.LineDisplacement.ux_start, 1)

# Generate displc multipliers
for y in range (0, len(fz)):
    g_o.displmultiplier()
    g='g_o.DisplacementMultiplier_'+str(y+1)
    g_o.set(g[y].Amplitude, 10)
    g_o.set(g[y].DataType, "Accelerations")
    g_o.set(g[y].Frequency, fz[y])

Ошибка из кода:

  g_o.set(g[y].Amplitude, 10)
AttributeError: 'str' object has no attribute 'Amplitude'

1 Ответ

0 голосов
/ 08 июня 2018

Если я правильно понял ваш вопрос, вы пытаетесь получить динамический доступ к свойству.

Удалите следующую строку внизу для цикла

g='g_o.DisplacementMultiplier_'+str(y+1)

Измените следующие строки

g_o.set(g[y].Amplitude, 10)
g_o.set(g[y].DataType, "Accelerations")
g_o.set(g[y].Frequency, fz[y])

до

g_o.set(g_o['DisplacementMultiplier_'+str(y+1)].Amplitude, 10)
g_o.set(g_o['DisplacementMultiplier_'+str(y+1)].DataType, "Accelerations")
g_o.set(g_o['DisplacementMultiplier_'+str(y+1)].Frequency, fz[y])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...