2013-11-23 84 views
0

當我運行此代碼時,出現以下錯誤消息: 文件「Start.py」,第22行,在 c.lo() TypeError:lo()不接受任何參數)Python:函數不帶參數

我不知道爲什麼我得到這個錯誤有人可以解釋嗎? 我知道它說我調用該函數時發生了一個爭論,但我不明白這是爲什麼? 如果有人能夠對這個問題有所瞭解,那就太好了。

import subprocess as sp 
import Tkinter as Tk 
from Tkinter import * 
root = Tk() 
text=Text(root) 
class Console: 
    def Start(): 
     proc = sp.Popen(["java", "-Xmx1536M", "-Xms1536M", "-jar",".jar"],stdin=sp.PIPE,stdout=sp.PIPE,) 
    def lo(): 
     while True: 
      line=proc.stdout.readline() 
      text.insert(INSERT,line) 
      text.pack() 
      if(line=="Read Time Out"): 
       proc.stdin.write('stop') 
      if(line=="Unloading Dimension"): 
       text.insert(INSERT,"Ready for command") 
       text.pack() 
c=Console() 
c.Start() 
c.lo() 
root.mainloop() 

回答

1

總之,這是因爲lo()是類Console的方法,它總是通過實例作爲第一個參數。所以lo()必須定義一個參數(主要是叫self)持有這樣的說法:

class Console: 
    def start(self): # functions and methods should have lowercase names 
     self.proc = sp.Popen(...) 
    def lo(self): 
     line = self.proc.stdout.readline() 
     ... 

我很奇怪,你的電話Start()工作;它有同樣的問題。

2

方法始終將實例作爲第一個參數。
你的方法定義應該是這樣的:

def some_method(self): 
    # do_stuff