如何从Python中运行调用Thread派生类方法?

时间:2012-08-11 20:35:47

标签: python multithreading inheritance

目前我不是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__run。< / p>

问题在于,一旦执行到达self.initStuff(),我就看不到任何消息了,只有"Hello 1",我认为用python调用派生方法有些问题,但我不知道发生了什么事。

发生了什么事?

2 个答案:

答案 0 :(得分:4)

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

class MyClass(object):

    def initStuff(self):
        pass

c = MyClass()
c.initStuff()

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

很明显,您的代码在您定义的线程中无声地失败。

解决问题的方法是根据Python规则定义initStuff方法。

 ...
 def initStuff(self):  #  Here 'self' argument is defined
      pass

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

详细了解documentation中的课程。

答案 1 :(得分:1)

哦,我知道了,我只需要将self作为参数传递给initStuff