2017-03-03 54 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