从Python类中的2D数组返回值

时间:2015-05-05 19:33:20

标签: python arrays

我将构建这一事实,因为我是Python的新手,我正在第一次学习写作课程。我想要实现的是让类打开一个文本文件并根据用户输入从文件中返回一个值。文本文件包含2D数组中的信息,如下所示:

 20,21,22
 23,24,25
 26,27,28

从该文本文件中检索该值并将其分配给新变量,以便可以打印该变量并在以后的计算中使用。我已经能够在课堂上毫无困难地完成这项任务,但是让它在课堂上工作一直令人沮丧。这是我到目前为止在Python 2.7中的代码:

im_new = []

class Read(object):
    def __init__(self, row, col, newvar):
        self.row = row
        self.col = col
        self.newvar = newvar

        display_list = []
        self.newvar = []

        with open("Array.txt", "r") as data_file:
            for line in data_file:
                display_list.append(line.strip().split(','))

    def __str__(self):
        self.newvar = (display_list[self.row][self.col])
        return self.newvar

immem = Read( 1, 1, im_new)


print "OUTPUT: ", im_new

理想情况下,我会得到“OUTPUT:24”,但我会得到“OUTPUT:[]”。我不确定我做错了什么。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

首先,您要混合两个变量。 im_new是一个空列表; immemRead个实例。将最后一行更改为print 'OUTPUT:', immem

解决问题后,您会遇到另一个问题:NameError display_list。这是因为您忘记了self.上的display_list,但是使用了__init__方法和__str__方法。 (我假设您知道self.的含义,因为您可以正确地使用它来处理所有其他属性。)

作为旁注,每次获得对象的self.newvar时,覆盖__str__都会有点奇怪。这个属性确实没有理由存在,至少在你所展示的代码中是这样。所以你可以这样做:

class Read(object):
    def __init__(self, row, col):
        self.row = row
        self.col = col

        self.display_list = []

        with open("Array.txt", "r") as data_file:
            for line in data_file:
                self.display_list.append(line.strip().split(','))

    def __str__(self):
        return self.display_list[self.row][self.col]

immem = Read(1, 1)