2013-02-13 74 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

相關問題