我写了以下程序:
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>]
好像程序没有访问实际对象并打印它。我在这做错了什么?
答案 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)]