Py学习  »  Python

Python-缺少位置参数

personalt • 5 年前 • 1195 次点击  

我试图通过构建一些代码来学习一些关于线程的知识,这些代码将维护一个列表,并最终将该列表中的值发送到一个待创建的函数。当我打电话 QueryReport.add 我明白错误 TypeError: add() missing 1 required positional argument: 'user' . 我想进去 report user 列出值。我相信 add 方法需求 self 但是那 自己 不知什么原因,我似乎要放弃我的电话,因为现在我没有正确的位置阿鲁古门特的号码。在许多其他代码示例中,我看到用 自己 以及另外两个值,其思想是当mthod被调用时,传递两个值。你觉得我做错了什么?既然我不能克服这个语法错误,还有什么比这更严重的错误吗?

from threading import *

class QueueReport(Thread):
  def __init__(self):
    Thread.__init__(self)
    self.reports_to_call = []

  def add(self, report, user):
    self.reports_to_call.append([report, user])
    print("Added Value")

  def run(self):
    print("Running")
    #print(reports_to_call)
    #will loop and send values from this list to another function


if __name__ == '__main__':
  t1 = QueueReport()
  t1.run()

  QueueReport.add("mainreport", "user")
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/50196
 
1195 次点击  
文章 [ 2 ]  |  最新文章 5 年前
Julien Roullé
Reply   •   1 楼
Julien Roullé    5 年前

您使用的是类方法,而不是类的实例化。

因此,self没有被赋予该方法,因此缺少一个参数。

试着做 t1.add("mainreport", "user")

Dave Fol
Reply   •   2 楼
Dave Fol    5 年前

您正试图添加到类中 QueueReport 而不是类的实例 t1 . 在类上调用函数时,没有 self 所以它对待 "mainreport" 作为 自己 "user" 作为 report .

你想做的是 t1.add("mainreport", "user") .

皱纹是,如果 run 是一个无限循环,它将阻止执行和 t1.add 永远不会发生。

你能做的就是为 t1.run .

from threading import Thread
thread = Thread(target=t1.run)
thread.start()
t1.add("mainreport", "user")

编辑:我真傻,我没看到你已经在用线程了。