我正在制作一个对象列表,其中列表与文件名列表的长度相等。如何使每个对象以文件名列表中的相应名称命名?
file_list = ['file1.txt','file2.txt','file3.txt']
object_list = []
for Object in file_list:
object_list.append(Object(file1.txt))
打印出object_list给我一些类似的东西:
[<__main__.Object object at 0x02C6D310>, <__main__.Object object at 0x02C6D330>, <__main__.Object object at 0x02C6D4B0>]
如何创建它以便将每个对象命名为其文件名,以便我按照以下方式进行操作:
[File1, File2, File3]
由于
答案 0 :(得分:1)
虽然Loocid的评论可能是您正在做的事情的好方法,但您的确切问题也可以得到解答。在此打印期间将对象转换为文本的方式由其__repr__()
方法处理。因此,您可以定义此方法以显示文件名或您需要的任何其他名称。例如:
class Object:
def __init__(self, fname):
self._f = open(fname)
self._fname = fname
def __repr__(self):
return self._fname
然后:
file_list = ['file1.txt','file2.txt','file3.txt']
object_list = []
for fname in file_list:
object_list.append(Object(fname))
print(object_list)
给出了
[file1.txt, file2.txt, file3.txt]
编辑:我必须注意,尽管如此使用__repr__
是不好的做法。理想情况下,它应该返回一些可以eval()
回到原始对象的东西(或者至少标识它)。好的__repr__
就是
def __repr__(self):
return 'Object(' + self._fname + ')'