如何命名同一对象的不同实例?

时间:2014-11-27 03:38:33

标签: python oop loops object naming

我正在制作一个对象列表,其中列表与文件名列表的长度相等。如何使每个对象以文件名列表中的相应名称命名?

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]

由于

1 个答案:

答案 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 + ')'