如何在python中打印二维对象数组? [复制]
Posted
技术标签:
【中文标题】如何在python中打印二维对象数组? [复制]【英文标题】:How to print 2d array of objects in python? [duplicate] 【发布时间】:2016-02-25 06:10:20 【问题描述】:我有一个二维对象数组,其中我为每个索引分配了一个对象:
for row in range(0, 9):
for column in range(0, 9):
self.Matrix[row][column] = Square(row, column)
其中 Square() 是一个接受特定索引的对象。每个 Square 对象都有一个方法构造函数 (def __str__
),它将为其特定坐标打印特定文本(例如“KN”)。我试过只打印矩阵:
print self.Matrix()
但我最终得到了一个非常长的东西
[[<__main__.Square object at 0x101936d90>, <__main__.Square object at 0x101936dd0>, <__main__.Square object at 0x101936e10>, .....
我怎样才能打印实际的对象?
【问题讨论】:
您确定print
中的括号在Matrix
之后吗?因为我认为如果你这样做了,你应该得到一个错误。
您正在打印为 repr 而不是 str。 self.Matrix() 是如何实现的?
【参考方案1】:
发生这种情况是因为您正在打印包含Square
s 的Matrix
。这将调用__str__()
为Matrix
类。如果您还没有为该类定义一个 __str__()
,该类返回一个字符串,该字符串包含每个包含的对象的 str()
,它将为您提供每个对象的 repr()
,由他们的__repr__()
定义。我不认为你已经定义了一个。如您所见,默认值只是一个内存位置。
这是一个带有存根类的演示:
>>> class A:
... def __str__(self):
... return 'a'
... def __repr__(self):
... return 'b'
...
>>> print(A())
a
>>> A()
b
>>> [A(), A()]
[b, b]
>>> print([A(), A()])
[b, b]
>>> print(*[A(), A()])
a a
解决方案是为Matrix
定义一个特定的__str__()
,为它所包含的每个对象返回str()
,或者为Square
对象定义一个合适的__repr__()
(这应该是可以传递给eval()
以重新创建对象,而不仅仅是像“KN”这样的东西。
【讨论】:
【参考方案2】:你应该使用 __repr__
difference between __repr__ and __str__
class A():
def __str__(self):
return "this is __str__"
class B():
def __repr__(self):
return "this is __repr__"
a = [A() for one in range(10)]
b = [B() for one in range(10)]
print a
[<__main__.A instance at 0x103e314d0>, <__main__.A instance at 0x103e31488>]
print b
[this is __repr__, this is __repr__]
【讨论】:
以上是关于如何在python中打印二维对象数组? [复制]的主要内容,如果未能解决你的问题,请参考以下文章