Python:在 Class 中定义对象
Python: Define Object within a Class
对 Python 很陌生,需要一些帮助。如何在 class 中引用成员?
我有两个 csv 文件。一个包含一系列零件和关联的 material ID。另一个是 material 索引,其中包含 material 的 ID 和一些关于 material 的信息。
我打算创建第三个文件,其中包含所有部件、它们的 material ID 以及 material 索引中存在的信息。
我已经为 material 索引创建了一个 class 并且正在尝试使用零件文件中的 material ID 访问此 class 中的对象,但是,这是不工作,我不确定为什么。感谢任何帮助:
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)
我可能误解了你的问题,但是离线 'How do I go about referencing members in a class?' 你可以像这样引用成员变量:
class Demonstration:
def __init__(self, a, b):
self.a = a
self.b = b
def printMembers(self):
print self.a, self.b
所以在class里面你可以使用self.someVariable
来引用成员变量。
如果您想在 class 之外访问它们:
myclass.myvariable
如果我不太理解您的问题或您遇到特定错误,我会很乐意编辑答案。
因为在评论中你说你的错误在 materials[material_id]
使 material_id
成为一个整数,因为它在你创建对象时是一个整数。
你是这样创建的
materials[int(comma_split[0])]=...
但后来调用它时没有将 material_id
转换为 int。在 for 循环中调用它以写入输出之前执行此操作。
material_id = int(material_id)
我不明白你有什么错误,你能把回溯吗?无论如何,您在分配时创建了一个 class 实例。为了更优雅的编程,你可以简单地做:
m = materials(name, ftu, e, nu)
这样你就可以像这样访问实例变量:
m.name
m.ftu
...
然后尝试,除了 -> 通过它非常危险
对 Python 很陌生,需要一些帮助。如何在 class 中引用成员? 我有两个 csv 文件。一个包含一系列零件和关联的 material ID。另一个是 material 索引,其中包含 material 的 ID 和一些关于 material 的信息。
我打算创建第三个文件,其中包含所有部件、它们的 material ID 以及 material 索引中存在的信息。
我已经为 material 索引创建了一个 class 并且正在尝试使用零件文件中的 material ID 访问此 class 中的对象,但是,这是不工作,我不确定为什么。感谢任何帮助:
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)
我可能误解了你的问题,但是离线 'How do I go about referencing members in a class?' 你可以像这样引用成员变量:
class Demonstration:
def __init__(self, a, b):
self.a = a
self.b = b
def printMembers(self):
print self.a, self.b
所以在class里面你可以使用self.someVariable
来引用成员变量。
如果您想在 class 之外访问它们:
myclass.myvariable
如果我不太理解您的问题或您遇到特定错误,我会很乐意编辑答案。
因为在评论中你说你的错误在 materials[material_id]
使 material_id
成为一个整数,因为它在你创建对象时是一个整数。
你是这样创建的
materials[int(comma_split[0])]=...
但后来调用它时没有将 material_id
转换为 int。在 for 循环中调用它以写入输出之前执行此操作。
material_id = int(material_id)
我不明白你有什么错误,你能把回溯吗?无论如何,您在分配时创建了一个 class 实例。为了更优雅的编程,你可以简单地做:
m = materials(name, ftu, e, nu)
这样你就可以像这样访问实例变量:
m.name
m.ftu
...
然后尝试,除了 -> 通过它非常危险