Python 从列表创建类实例
使用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
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,你能发布类“陷阱”源代码吗?只需编辑问题并添加代码。我想帮忙。