2013-02-13 50 views
0

我想从另一个文件中导入一个类,然后在我的主函数中实现成员函数。我真的只是想了解Python的语法,因为我对这门语言仍然很陌生。我的程序很简单,并不是真的要做太多。我或多或少只是试图掌握Python如何解决这个问题。我的类文件名为Parser.py和这里的是代码:Python:从另一个文件导入类并实现函数

class Parser: 
def hasMoreCommands(self): 

    if not c: 
     return false 
    else: 
     return true 

,我的主要功能是在一个名为jacklex.py主要功能才会打开输入文件和复制文本的输出文件的文件。这里的代码:

import Parser 
from Parser import * 

f = open('/Python27/JackLex.txt' , 'r+') 
fout = open('/Python27/output.txt' , 'w') 

while Parser.hasMoreCommands: 
    c = f.read(1) 
    fout.write(c) 
print "All Done" 
f.close() 
fout.close() 

我的问题是,我的程序运行,但它似乎陷入了无限循环。从来没有任何文本输出到输出文件,并且“全部完成”永远不会打印在Python Shell中。我是否错过了导致我的程序无法正常工作的重要内容?

+1

后你解决这个问题(按照Blender的答案),你将有另一个问题:'分析器。 hasMoreCommands'方法试图访问一个名为'c'的变量,但是没有这个名字的本地或全局变量。 'jacklex.py'具有全球同名的事实不会帮助你。如果你想'Parser'看到它,你需要通过它。例如,'def hasMoreCommands(self,c):',then'while parser.hasMoreCommands(c):' – abarnert 2013-02-13 01:21:56

+0

如果我想不断地读'c'我想让它在循环内部,但是当我把'c = f.read(1)'在我的循环中我得到一个错误,说'name'c'没有被定义',它指的是'parser.hasMoreCommands(c)'然后我怎么会通过这个错误?' – 2013-02-13 01:42:44

回答

3

Parser.hasMoreCommands引用(unbound)方法,而不是输出。它总是会评估为True

你需要创建一个解析器的一个实例,然后调用方法:

parser = Parser() 

while parser.hasMoreCommands(): 
    ... 
+0

+ 1.除了说它指的是“类方法”是误导性的,它不是一个类方法,它是一种正常的(未绑定的)方法。 – abarnert 2013-02-13 01:19:39

+0

@abarnert:谢谢,我最终会把这个术语拿出来...... – Blender 2013-02-13 01:20:42

+0

我确定你会习惯2.x的术语,然后转到3.x,那里的事情是不同的,就像我终于学会说“经典课”而不是“老式课”。:) – abarnert 2013-02-13 01:23:58

相关问题