如何在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】:

发生这种情况是因为您正在打印包含Squares 的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中打印二维对象数组? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中为二维对象数组分配内存? [复制]

在python中打印一个二维数组

java如何判断两个二维对象数组相等,让后打印一句话。

如何从 Angular 5 中的二维数组打印表格?

C语言 二维数组复制清零及打印显示

如何从文本文件创建二维数组并在 c 中打印到新文件