打印对象列表时不可见的值

时间:2013-11-20 13:31:04

标签: python list

完全重写代码:

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

我是对象编程的新手,我不明白为什么我在列表中看不到这些值。

3 个答案:

答案 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)