python构造函数基本问题

时间:2011-05-24 22:05:37

标签: python constructor

我正在尝试重用一个在类的构造函数实例中声明的打开文件,但我想我在做一些逻辑上错误的操作。例如,请考虑以下示例

class Temp:
    def __init__(self):
        self.open_file_ = open('periodic_status','r')

    def function1(self):
        new_file = self.open_file_
        for i in new_file:
            print 'test1'

    def function2(self):
        for j in self.open_file_:
            print 'test2'

if __name__ == '__main__':
    obj1 = Temp()
    obj1.function1()
    obj1.function2()

在上面的程序中我可以打印test1但是我无法打印语句test2。有人可以解释我的逻辑。

由于

3 个答案:

答案 0 :(得分:3)

因为您的文件句柄已耗尽文件中的所有行。你需要使用:

在“function2”中回放它
f.seek(0)

重新开始

请参阅此处docs.python.org

答案 1 :(得分:2)

复制引用不会创建新的迭代器;第一轮迭代消耗整个文件,第二轮没有消耗。如果你想再读一遍,你需要回头看。

答案 2 :(得分:1)

您应该在函数开头添加open_file_.seek(0)以将文件位置重置为开头(在函数1()中读取所有内容之后将其复制到文件的末尾。)