如何在python中打印2d对象数组?

时间:2015-11-23 07:46:41

标签: python arrays

我有一个2d的对象数组,其中我为每个索引分配了一个对象:

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>, .....

如何打印实际物体?

2 个答案:

答案 0 :(得分:2)

这种情况正在发生,因为您正在打印包含Matrix的{​​{1}}。这会为Square类调用__str__() 。如果您没有为该类定义Matrix,该类返回包含其每个包含对象的__str__()的字符串,它将为您提供{{1}这些对象中的每一个都由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 ,为每个包含的对象返回__str__(),或为{{定义合适的Matrix 1}}对象(应该是可以传递给str()以重新创建对象的东西,而不仅仅是“KN”)。

答案 1 :(得分:1)

您应该使用__repr __

difference between __repr__ and __str__

{
  "data": [
    {
      "message": "science",
      "created_time": "2015-11-23T07:01:00+0000",
      "id": "21898300328_10154109572045329"
    }
  ],
  "paging": {
    "previous": "https://graph.facebook.com/v2.5/21898300328/feed?limit=1&format=json&since=1448262060&access_token=&__paging_token=&__previous=1",
    "next": "https://graph.facebook.com/v2.5/21898300328/feed?limit=1&format=json&access_token=&until=1448262060&__paging_token="
  }
}