如何从Python中的run调用线程派生类方法?

2024-10-03 02:43:26 发布

您现在位置:Python中文网/ 问答频道 /正文

目前我不是python程序员,但我正在对一些python代码进行维护,我或多或少有以下几点:

class DerivedThread(threading.Thread):
  def __init__(self):
    threading.Thread.__init__(self)

  def initStuff():
    print "Hello 2"

  def run(self):
    print "Hello 1"
    self.initStuff()
    print "Hello 3"

initStuff实际上并没有调用print,只是设置了一些变量,我为组织添加了这个方法,之前只有__init__和{}。在

问题是,一旦执行达到self.initStuff(),我就再也看不到后面的消息了,只有"Hello 1",我以为用python调用派生方法有问题,但我不知道发生了什么。在

怎么回事?在


Tags: 方法run代码self消息helloinitdef
2条回答

问题在于initStuff方法的定义。它的定义中至少需要一个参数(通常称为“self”)(您没有定义任何参数)。让我们看看接下来会发生什么:

class MyClass(object):

    def initStuff(self):
        pass

c = MyClass()
c.initStuff()

TypeError: initStuff() takes no arguments (1 given)

所以很明显,您的代码在您定义的线程中以静默方式失败。在

解决这个问题的方法是按照Python规则定义initStuff方法。在

^{pr2}$

这种方法称为instancemethod,因为它是代表类实例调用的(第一个参数是必须显式定义的实例对象本身)。在

阅读有关documentation中类的更多信息。在

我明白了,我只需要把self作为参数传递给initStuff。在

相关问题 更多 >