打印对象python类

时间:2014-12-02 20:49:45

标签: python class

我写了以下程序:

def split_and_add(invoer):                              
    rij = invoer.split('=')
    rows = []
    for line in rij:
        rows.append(process_row(line))
    return rows

def process_row(line):                                  
    temp_coordinate_row = CoordinatRow()
    rij = line.split()
    for coordinate in rij:
        coor = process_coordinate(coordinate)
        temp_coordinate_row.add_coordinaterow(coor)
    return temp_coordinate_row

def process_coordinate(coordinate):
   cords = coordinate.split(',')
   return Coordinate(int(cords[0]),int(cords[1]))

bestand = file_input()
rows = split_and_add(bestand)
for row in range(0,len(rows)-1):
    rij = rows[row].weave(rows[row+1])
    print rij

使用这个课程:

class CoordinatRow(object):

def __init__(self):
    self.coordinaterow = []

def add_coordinaterow(self, coordinate):
    self.coordinaterow.append(coordinate)

def weave(self,other):
    lijst = []
    for i in range(len(self.coordinaterow)):
        lijst.append(self.coordinaterow[i])
        try:
            lijst.append(other.coordinaterow[i])
        except IndexError:
            pass 
    self.coordinaterow = lijst
    return self.coordinaterow

但是

中有错误
for row in range(0,len(rows)-1):
    rij = rows[row].weave(rows[row+1])
    print rij

印刷声明的结果如下:

[<Coordinates.Coordinate object at 0x021F5630>, <Coordinates.Coordinate object at 0x021F56D0>]

好像程序没有访问实际对象并打印它。我在这做错了什么?

1 个答案:

答案 0 :(得分:3)

这不是错误。这正是Python“访问实际对象并打印它”的意思。这就是类的默认字符串表示形式。

如果要自定义类的字符串表示形式,可以通过定义__repr__方法来实现。执行此操作的典型方法是编写一个返回类似于类的构造函数调用的方法。

由于您没有向我们展示Coordinate的定义,我将在此做出一些假设:

class Coordinate(object):
    def __init__(self, x, y):
        self.x, self.y = x, y
    # your other existing methods
    def __repr__(self):
        return '{}({}, {})'.format(type(self).__name__, self.x, self.y)

如果您没有自己定义,最终会从__repr__继承object,其外观如下:

return '<{} object at {:#010x}>'.format(type(self).__qualname__, id(self))

有时你想要一个更人性化的对象版本。在这种情况下,您还需要定义__str__方法:

    def __str__(self):
        return '<{}, {}>'.format(self.x, self.y)

现在:

>>> c = Coordinate(1, 2)
>>> c
Coordinate(1, 2)
>>> print(c)
<1, 2>

但请注意,列表的__str__会在其所有成员上调用__repr__

>>> cs = [c]
>>> print(cs)
[Coordinate(1, 2)]