2009-08-28 4 views
2

Использование python ..... У меня есть список, содержащий имена. Я хочу использовать каждый элемент в списке для создания экземпляров класса. Я не могу использовать эти элементы в их текущем состоянии (они являются строками). Кто-нибудь знает, как это сделать в цикле.создание экземпляров класса из списка

class trap(movevariables): 
    def __init__(self): 
     movevariables.__init__(self) 
     if self.X==0: 
      self.X=input('Move Distance(mm) ') 
     if self.Vmax==0: 
      self.Vmax=input('Max Velocity? (mm/s) ') 
     if self.A==0: 
      percentg=input('Acceleration as decimal percent of g' ) 
      self.A=percentg*9806.65 
     self.Xmin=((self.Vmax**2)/(2*self.A)) 
     self.calc() 
    def calc(self): 
     if (self.X/2)>self.Xmin: 
      self.ta=2*((self.Vmax)/self.A)    # to reach maximum velocity, the move is a symetrical trapezoid and the (acceleration time*2) is used 
      self.halfta=self.ta/2.        # to calculate the total amount of time consumed by acceleration and deceleration 
      self.xa=.5*self.A*(self.halfta)**2 
     else:                # If the move is not a trap, MaxV is not reached and the acceleration time is set to zero for subsequent calculations               
      self.ta=0 
     if (self.X/2)<self.Xmin: 
      self.tva=(self.X/self.A)**.5 
      self.halftva=self.tva/2 
      self.Vtriang=self.A*self.halftva 
     else: 
      self.tva=0 
     if (self.X/2)>self.Xmin: 
      self.tvc=(self.X-2*self.Xmin)/(self.Vmax) # calculate the Constant velocity time if you DO get to it 
     else: 
      self.tvc=0 
     self.t=(self.ta+self.tva+self.tvc) 
     print self 

Я инженер-механик. Класс ловушки описывает профиль движения, который является общим для всей конструкции нашего оборудования. В нашем оборудовании много независимых осей (классы ловушек), поэтому мне нужно различать их, создавая уникальные экземпляры. Класс trap наследует от movevariables множество функций getter/setter, структурированных как свойства. Таким образом, я могу редактировать переменные, используя имена экземпляров. Я думаю, что я могу инициализировать многие оси машины сразу, перейдя через список, а не печатать их.

+1

Что вам нужно эти строки быть? Вам нужно больше деталей, чтобы даже попытаться ответить на это. –

+0

Строки будут новыми экземплярами для класса. Я использую для создания экземпляров вроде этого ----- new = class(). Я хочу, чтобы получить «новый» из списка. – 2009-08-28 13:58:09

+0

Можете ли вы привести нам пример списка? –

ответ

2

Вы можете использовать Dict, как:

classes = {"foo" : foo, "bar" : bar} 

, то вы можете сделать:

myvar = classes[somestring]() 

Таким образом, вы должны инициализировать и сохранить Dict, но будет иметь контроль над которой классы могут быть созданы.

2

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

def forname(modname, classname): 
    ''' Returns a class of "classname" from module "modname". ''' 
    module = __import__(modname) 
    classobj = getattr(module, classname) 
    return classobj 

От a blog post by Ben Snider.

1

Если список классов в строке формы вы можете:

classes = ['foo', 'bar'] 
for class in classes: 
    obj = eval(class) 

и создать экземпляр просто сделать это:

instance = obj(arg1, arg2, arg3) 
1

EDIT

Если вы хотите создать несколько экземпляров ловушки класса, вот что делать:

namelist=['lane1', 'lane2'] 
traps = dict((name, trap()) for name in namelist) 

Это создаст словарь, который отображает каждое имя в экземпляр.

Затем, чтобы получить доступ к каждому экземпляру по имени вы делаете:

traps['lane1'].Vmax 
Смежные вопросы