Python 从列表创建类实例

Python 从列表创建类实例,python,Python,使用python…我有一个包含名称的列表。我想使用列表中的每个项来创建类的实例。我无法在当前条件下使用这些项目(它们是字符串)。有人知道如何在循环中执行此操作吗 class trap(movevariables): def __init__(self): movevariables.__init__(self) if self.X==0: self.X=input('Move Distance(mm) ') if s

使用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
类陷阱(移动变量):
定义初始化(自):
movevariables.\uuuu init\uuuu(self)
如果self.X==0:
self.X=输入(“移动距离(mm)”
如果self.Vmax==0:
self.Vmax=输入(“最大速度”(毫米/秒))
如果self.A==0:
percentg=输入('加速度为g的小数百分比')
自身A=百分比g*9806.65
self.Xmin=((self.Vmax**2)/(2*self.A))
self.calc()
def计算(自身):
如果(self.X/2)>self.Xmin:
self.ta=2*((self.Vmax)/self.A)#为达到最大速度,移动为对称梯形,并使用(加速时间*2)
self.halfta=self.ta/2.#计算加速和减速所消耗的总时间
self.xa=.5*self.A*(self.halfta)**2
否则:#如果移动不是陷阱,则未达到最大值,并且加速度时间设置为零,以便后续计算
self.ta=0
如果(self.X/2)self.Xmin:
self.tvc=(self.X-2*self.Xmin)/(self.Vmax)#如果你能计算出等速时间
其他:
self.tvc=0
self.t=(self.ta+self.tva+self.tvc)
打印自我

我是一名机械工程师。陷阱类描述了在我们的机械设计中常见的运动轮廓。在我们的设备中有许多独立的轴(陷阱类),所以我需要通过创建唯一的实例来区分它们。trap类从movevariables继承了许多构造为属性的getter/setter函数。通过这种方式,我可以使用实例名称编辑变量。我在想,我可以通过在列表中循环而不是逐个键入来一次初始化多个机器轴。

您可能正在寻找。

您可以使用dict,例如:

classes = {"foo" : foo, "bar" : bar}
然后你可以做:

myvar = classes[somestring]()

这样,您将必须初始化并保留dict,但可以控制可以创建哪些类。

getattr方法似乎是正确的,更详细一点:

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

From.

如果它是字符串形式的类列表,您可以:

classes = ['foo', 'bar']
for class in classes:
    obj = eval(class)
要创建实例,只需执行以下操作:

instance = obj(arg1, arg2, arg3)
编辑

如果要创建多个类陷阱实例,请执行以下操作:

namelist=['lane1', 'lane2']
traps = dict((name, trap()) for name in namelist)
这将创建一个字典,将每个名称映射到实例

然后,要按名称访问每个实例,请执行以下操作:

traps['lane1'].Vmax

你需要这些字符串是什么?需要更多细节来回答这个问题。字符串将是类的新实例。我习惯于创建这样的实例------new=class()。我希望能够从列表中获取“新的”。你能给我们一个列表示例吗?@Tgatman,你能编辑你的问题并添加这些新的详细信息吗?这里有什么课?类是python中的一个关键字。你想达到什么目标?写出问题中的所有细节以获得最佳帮助。@Tgatman,你能发布类“陷阱”源代码吗?只需编辑问题并添加代码。我想帮忙。