如何在python中输出二维对象数组?

How to print 2d array of objects in python?

本问题已经有最佳答案,请猛点这里访问。

我有一个二维对象数组,其中我为每个索引分配了一个对象:

1
2
3
for row in range(0, 9):
        for column in range(0, 9):
            self.Matrix[row][column] = Square(row, column)

其中square()是接受特定索引的对象。每个方形对象都有一个方法构造函数(def __str__),将为其特定坐标打印特定文本(例如"kn")。我试过打印矩阵:

1
print self.Matrix()

但我最后得到了一个很长的,就像

1
[[<__main__.Square object at 0x101936d90>, <__main__.Square object at 0x101936dd0>, <__main__.Square object at 0x101936e10>, .....

如何打印实际对象?


这是因为您正在打印包含Squares的Matrix。这将为Matrix类调用__str__()。如果您没有为该类定义一个__str__(),该类返回一个字符串,该字符串包含每个包含的对象的str(),那么它将为您提供每个这些对象的repr(),由它们的__repr__()定义。我想你没有定义一个。如您所见,默认值只是一个内存位置。

下面是一个带有存根类的演示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
>>> 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"这样的对象)。


你应该用"重复"__

_uuu repr_uuu和_uuu str之间的差异__

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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__]