Python:Function不带参数

问题描述 投票:0回答:2

运行此代码时,我收到错误消息:

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()
python function tkinter arguments subprocess
2个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.