【问题标题】:How to print 2d array of objects in python? [duplicate]如何在python中打印二维对象数组? [复制]
【发布时间】: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() 是如何实现的?

标签: python arrays


【解决方案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__]
    

    【讨论】:

      猜你喜欢
      • 2016-11-27
      • 2016-02-16
      • 1970-01-01
      • 2017-05-22
      • 2015-10-12
      • 1970-01-01
      • 2021-11-20
      • 2013-07-26
      相关资源
      最近更新 更多