完全重写代码:
HOR = [0, 1, 3, 6]
VER = [0,10,20,100,1000]
class Pos:
def __init__(self, x, y):
if (x in HOR) and (y in VER):
self.x = x
self.y = y
else:
print "Invalid position: ", x, y
def __str__(self):
return self.x + self.y
def get_x(self):
return self.x
def get_y(self):
return self.y
class list_A1:
def __init__(self): # create a A1 object
self.list_A1 = []
for i in HOR:
for j in VER:
self.list_A1.append(Pos(i,j))
def __str__(self):
d = "list_A1 contains: " + repr(self)
return d # return a string representing the A1
a1 = list_A1()
print a1
现在我明白了:
list_A1 contains: <__main__.list_A1 object>
但我希望得到[x,y]
的列表,例如:
[[1,1],[1,2]...]
我是对象编程的新手,我不明白为什么我在列表中看不到这些值。
答案 0 :(得分:1)
self.A1
之后的括号表示您试图将其称为函数。正如错误消息告诉您的那样,您无法调用列表。正确的语法是:
d = "A1 contains: " + str(self.A1)
或更好
d = "A1 contains: {}".format(self.A1)
此外,您似乎可以互换地使用A1
(类名)和A
(实例属性);你应该给你的课程,属性和方法更明智和有意义的名字,以帮助避免这个问题。
答案 1 :(得分:0)
待办事项
self.A.append(Pos(x,y))
而不是
self.A1.append(Pos(x,y))
和
d = "A1 contains: " + str(self.A)
修改强>
如果要打印str(self)
,请实施repr(self)
和Pos
。
答案 2 :(得分:0)
A1.A1
。如果是列表,只需将行更改为:
d = "A1 contains: " + str(self.A1)