2017-03-03 56 views
-1

对Python很新颖,可以做一些帮助。我如何去引用一个类中的成员? 我有两个csv文件。一个包含一系列零件和相关的材料ID。另一个是包含材料ID和关于该材料的一些信息的材料索引。Python:在类中定义对象

我的意图是创建第三个文件,其中包含所有零件,其材料ID和材料索引中的信息(如果存在)。

我已经为材质索引创建了一个类,并试图使用零件文件中的材质ID访问此类中的对象,但是这不起作用,我不确定原因。任何帮助表示赞赏:“我如何去在一个类中引用成员

class material(): 
    def __init__(self, name, ftu, e, nu): 
     self.name = name 
     self.ftu = ftu 
     self.e = e 
     self.nu = nu 

def extract_FTU_Strain(input_file_parts,input_file_FTU,output_file): 

    parts = {} 
    materials = {} 

    for aline in open(input_file_FTU, 'r'): 
     comma_split = aline.strip().split(',') 
     name = comma_split[1] 
     ftu = comma_split[8] 
     e = comma_split[9] 
     nu = comma_split[7] 



     try: 
      materials[int(comma_split[0])] = material(comma_split[1],comma_split[8],comma_split[9],comma_split[7]) 
      #materials[comma_split[0]] = material(comma_split[1],comma_split[8],comma_split[9],comma_split[7]) 
     except: 
      pass 


    for i in open(input_file_parts, 'r'): 
     semicolon_split = i.strip().split(';') 


     material_id = semicolon_split[3] 


     part = semicolon_split[0] 
     part_id = semicolon_split[1] 

     material_name = materials[material_id].name 
     FTU = materials[material_id].ftu 
     Stress = materials[material_id].e 
     output.write(','.join([part,part_id,material_name,material_id,FTU,Stress]) + '\n') 












    output = open (output_file,'w') 
    output.write('Part Title, Part Id, Material Id, FTU, e' + '\n') 
    output.close() 

import sys 

input_file_parts = '/parttable.csv' 
input_file_FTU = '/Material_Index.csv' 
output_file = '/PYTHONTESTING123.csv' 
extract_FTU_Strain(input_file_parts,input_file_FTU,output_file) 
+2

什么不工作?请将您的代码减少到展示问题所需的最低限度。至少,在发布之前删除注释掉的行。 –

+0

所以我相信我已经成功创建了类,但是在尝试从类中提取信息时出现错误: line:'material_name = materials [material_id] .name' 我认为这是因为material_id来自零件列表文件和类已从材料索引中生成。 –

+2

**什么错误**? –

回答

0

由于您在评论中表示您的错误发生在materials[material_id],因此在创建对象时它是一个整数。

你创造了它这样

materials[int(comma_split[0])]=...

但后来把它叫做无需转换material_id为int。在调用for循环写入输出之前,先执行此操作。

material_id = int(material_id) 
0

我可能误解了你的问题,但要断了线你可以参考成员变量,像这样:

class Demonstration: 
    def __init__(self, a, b): 
     self.a = a 
     self.b = b 

    def printMembers(self): 
     print self.a, self.b 

所以里面的类可以使用self.someVariable引用成员变量。

如果要访问这些外部类:

myclass.myvariable 

如果我have't我会高兴地编辑答案很理解您的问题或如果有一个特定的错误你得到。

0

我不明白你有什么错误,你可以把追溯?无论如何,你正在分配时创建一个类实例。欲了解更多高雅节目,你可以简单地做:

m = materials(name, ftu, e, nu)

这样,您就可以访问实例变量是这样的:

m.name 
m.ftu 
... 

试试,除了 - >传这是非常危险的

+0

所以我想我的问题是你如何指定你想要的类名称m.name。当然,这可以引用任何实例,因为班上的每个成员都有一个关联的名字,ftu,u和nu? –

+0

没错。当你创建一个类实例时,你可以使用var.name访问变量和方法。在python中没有Java或其他语言中定义的私有可见性。默认情况下,可见性是公开的 – Francesc