2017-03-03 23 views
-1

非常に新しいクラス内のオブジェクトを定義し、いくつかの助けを借りて行うことができます。どのようにクラス内のメンバーを参照するのですか? 私は2つのcsvファイルを持っています。 1つは一連の部品と関連する材料IDを含みます。もう1つは、品目IDとその品目に関するいくつかの情報を含む品目索引です。Pythonは:Pythonのに

私の意図は、すべての部品が含まれている3番目のファイルを作成するために、その材料同上の情報であれば材料のインデックスに存在しています。

私は材料のインデックスのためのクラスを作成していると、一部のファイルから材料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]material_idは、オブジェクトを作成したときに整数だったので、整数にしてください。

あなたはこのよう

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

しかし、その後intにmaterial_idを変換せずに呼ばれるそれを作成しました。 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

関連する問題