运行此代码时,我收到错误消息:
File "Start.py", line 22, in <module>
c.lo()
TypeError: lo() takes no arguments (1 given)
我不知道为什么会收到此错误,有人可以解释吗?我知道这是说我在调用该函数时输入了一个参数,但是我不明白为什么会这样?
如果有人可以阐明这个问题,那就太好了。
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()
简而言之,因为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()
通话成功,我感到很惊讶;它有相同的问题。
方法始终将实例作为第一个参数。您的方法定义应类似于:
def some_method(self):
# do_stuff