打印一个用户自定义类的对象列表

2024-04-28 11:58:09 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个类,叫做Vertex

class Vertex:
    '''
    This class is the vertex class. It represents a vertex.
    '''

    def __init__(self, label):
        self.label = label
        self.neighbours = []

    def __str__(self):
        return("Vertex "+str(self.label)+":"+str(self.neighbours))

我要打印此类对象的列表,如下所示:

x = [Vertex(1), Vertex(2)]
print x

但它显示了如下输出:

[<__main__.Vertex instance at 0xb76ed84c>, <__main__.Vertex instance at 0xb76ed86c>]

实际上,我想为每个对象打印Vertex.label的值。 有办法吗?


Tags: the对象instanceselfismaindefthis
2条回答

如果你想要更多的信息除了丹尼尔·罗斯曼的回答:

在python中,__repr____str__是两个不同的东西。(但是,请注意,如果您只定义了__repr__,那么对class.__str__的调用将转换为对class.__repr__的调用)

__repr__的目标是明确无误。另外,如果可能的话,您应该定义repr以便(在您的情况下)eval(repr(instance)) == instance

另一方面,__str__的目标是可以重新设计;因此,如果必须在屏幕上打印实例(可能是对用户而言),如果不需要,那么就不要实现它(同样,如果未实现中的str将被称为repr),这很重要

另外,当在空闲解释器中键入内容时,它会自动调用对象的repr表示。或者当您打印一个列表时,它调用list.__str__(与list.__repr__相同),依次调用列表中包含的任何元素的repr表示。这解释了你的行为,并希望如何解决它

如果只想打印每个对象的标签,可以使用循环或列表理解:

print [vertex.label for vertex in x]

但是要回答您原来的问题,您需要定义__repr__方法来获得正确的列表输出。可能是这么简单:

def __repr__(self):
    return str(self)

相关问题 更多 >