2016-09-11 44 views
0

我有一个列表,其中包含每次运行脚本时都会更改的唯一项目(如果您愿意的话)。所有这些项目都有一些在脚本期间修改的计算属性。例如'S1'将有pos = 55和ori ='R'。我想要一个简单的方法来访问这些属性根据他们的名字。为列表中的每个元素分配一组属性

“分配”这些属性的最佳方法是什么?我一直在四处寻找和字典似乎并没有向前走,所以我试图用类的正确方法,并提出了以下非功能代码代码:

class Primer: #contains all properties of a primer 
    def __init__(self): 
     """ Contains all properties of the primer """ 
     self.pos = 0 #outermost 5' position in sequence to bind 
     self.ori = '' #F(orward) or R(everse) 


primer_list = ['S', 'M1', 'M2', 'M3', 'E'] 

for i in primer_list: 
     i = primer() 

print S.pos #this should give me the pos value of 'S' 

我在正确的轨道上,但缺少的东西或者是有更好的方法来做到这一点?

编辑 我忘了提到我也需要让我的价值回归。同样无能如何做到这一点

与列表
print primer_list[0].pos #should give me the pos value of S in my example 
+0

所有这些项目是否具有相同的属性? 'pos'和'ori'?他们是否需要用某些值进行初始化? – galah92

+0

@ galah92它们都具有相同数量的属性,但是值例如变化ori可以是'F'或'R'。他们应该用空白值进行初始化,但这些应该在后面的脚本中被分配 – mimat

+0

然后,我会像上课一样去上课。我相信它会帮助你构建你的代码并使其更具可读性。 – galah92

回答

0

您所遇到的问题,你实际上并没有与创建的实例替换旧的值。我还添加了一个名称字段,以便您可以跟踪每个实例。

class Primer: #contains all properties of a primer 
    def __init__(self, name): 
     """ Contains all properties of the primer """ 
     self.name = name 
     self.pos = 0 #outermost 5' position in sequence to bind 
     self.ori = '' #F(orward) or R(everse) 

    def __str__(self): 
     return self.name 

primer_list = ['S', 'M1', 'M2', 'M3', 'E'] 
new_primer = [Primer(x) for x in primer_list] 

for i in new_primer: 
    print i 
    print i.pos 
    print i.ori 
+1

这段代码正是我所需要的! – mimat

相关问题