Python 3.x Python-可以在线程中调用同一类两次(或更多)?
我不太理解python中的类逻辑,但无法在web上回答。 我已创建一个类来生成人员信息:Python 3.x Python-可以在线程中调用同一类两次(或更多)?,python-3.x,class,python-multithreading,Python 3.x,Class,Python Multithreading,我不太理解python中的类逻辑,但无法在web上回答。 我已创建一个类来生成人员信息: class person: def fristnameGen(gender): ... def emailGen(firstname,surname): ... 我创建了一个bot来这样称呼它: from person import * class bots: def __init__(self): self.p
class person:
def fristnameGen(gender):
...
def emailGen(firstname,surname):
...
我创建了一个bot来这样称呼它:
from person import *
class bots:
def __init__(self):
self.person = person()
def createDB(self):
print(self.person.name)
#do something...
最后我用一个带线的按钮来称呼它
from bots import *
import threading
class Panel:
def __init__(self):
self.top = tk.Tk()
self.bot = bots()
self.buildUI()
def foo(self):
self.bot.createDB(self.stringPhone.get())
def threadTheAction(func, *args):
t = threading.Thread(target=func, args=args)
t.setDaemon(True)
t.start()
def buildUI(self):
Button = tk.Button(self.top, text ="Start", command = lambda :self.threadTheAction(self.foo))
我得到这个错误:
TypeError: 'Panel' object is not callable
然而,我直接称之为它的工作
Button = tk.Button(self.top, text ="Start", command = lambda :self.foo())
如何修复错误?
...
2.此外,我尝试创建p1=person()
和p2=person()
并打印它。发现p1
和p2
是同一个人,我希望每个新的a类都有一个新的。如何使用类生成“新人”
谢谢您似乎对Python中的面向对象编程有很多困惑。有些方法具有
self
参数,有些则没有,似乎是随机的。这就是您当前错误的来源
Panel
类中的threadTheAction
方法正在获取作为其第一个参数传入的Panel
实例,但该实例在方法中命名为func
(因为您省略了self
)。作为参数传递的实际函数会在变量参数*args
中捕获。当线程尝试调用它失败时,会出现异常。在func
之前添加self
可以解决当前的问题:
def threadTheAction(self, func, *args):
我怀疑,如果你的代码更进一步,你会在参数列表中没有self
的其他方法中遇到其他错误。例如,您在person
中显示的任何方法都不可能正常工作
至于你的第二个问题,你没有展示足够的
person
来了解发生了什么,但是你可能在某种程度上把实例变量做错了。由于方法中没有self
参数,这几乎是不可避免的(因为您将self.which
指定给当前实例以设置which
属性)。如果您需要帮助解决这个问题,我建议您单独问一个问题(当每个问题都是独立的时,堆栈溢出是最好的),并为您的person
类提供完整的代码。您似乎对Python中的面向对象编程有很多困惑。有些方法具有self
参数,有些则没有,似乎是随机的。这就是您当前错误的来源
Panel
类中的threadTheAction
方法正在获取作为其第一个参数传入的Panel
实例,但该实例在方法中命名为func
(因为您省略了self
)。作为参数传递的实际函数会在变量参数*args
中捕获。当线程尝试调用它失败时,会出现异常。在func
之前添加self
可以解决当前的问题:
def threadTheAction(self, func, *args):
我怀疑,如果你的代码更进一步,你会在参数列表中没有self
的其他方法中遇到其他错误。例如,您在person
中显示的任何方法都不可能正常工作
至于你的第二个问题,你没有展示足够的
person
来了解发生了什么,但是你可能在某种程度上把实例变量做错了。由于方法中没有self
参数,这几乎是不可避免的(因为您将self.which
指定给当前实例以设置which
属性)。如果你需要帮助来解决这个问题,我建议你问一个单独的问题(当每个问题都是独立的时,堆栈溢出是最好的),并为你的人提供完整的代码。谢谢你!对于threadTheAction,这是一个错误,因为我从另一篇关于堆栈溢出的文章中复制,但在我的类中忘记了它的方法,我三天内都没有办法修复它!对于第二个问题,我想自己花更多的时间来修复它,如果仍然无法修复,我会稍后再问。非常感谢。谢谢你,布莱克特!对于threadTheAction,这是一个错误,因为我从另一篇关于堆栈溢出的文章中复制,但在我的类中忘记了它的方法,我三天内都没有办法修复它!对于第二个问题,我想自己花更多的时间来修复它,如果仍然无法修复,我会稍后再问。非常感谢。