所以我有一个叫做的课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))
Run Code Online (Sandbox Code Playgroud)
我想打印这个类的对象列表,如下所示:
x = [Vertex(1), Vertex(2)]
print x
Run Code Online (Sandbox Code Playgroud)
但它显示我这样的输出:
[<__main__.Vertex instance at 0xb76ed84c>, <__main__.Vertex instance at 0xb76ed86c>]
Run Code Online (Sandbox Code Playgroud)
实际上,我想打印Vertex.label每个对象的值.有什么办法吗?
Dan*_*man 62
如果您只想打印每个对象的标签,可以使用循环或列表推导:
print [vertex.label for vertex in x]
Run Code Online (Sandbox Code Playgroud)
但要回答原始问题,您需要定义__repr__方法以使列表输出正确.它可能就像这样简单:
def __repr__(self):
return str(self)
Run Code Online (Sandbox Code Playgroud)
Ant*_*Ant 13
如果你想要除丹尼尔罗斯曼之外的更多信息回答:
__repr__并且__str__是python中的两个不同的东西.(但是,请注意,如果您仅定义了__repr__,class.__str__则会将一个调用转换为调用class.__repr__)
目标__repr__是明确无误.另外,在可能的情况下,您应该定义repr以便(在您的情况下)eval(repr(instance)) == instance
另一方面,目标__str__是可以重新获得; 所以如果你必须在屏幕上打印实例(可能是对于用户),如果你不需要这样做,那么就不要实现它(如果未实现的str将被称为repr)
另外,在Idle解释器中输入内容时,它会自动调用对象的repr表示.或者当你打印一个列表时,它会调用list.__str__(与之相同list.__repr__),即调用列表中包含的任何元素的repr表示.这解释了您获得的行为,并希望如何解决它
| 归档时间: |
|
| 查看次数: |
45736 次 |
| 最近记录: |