3

目前我不是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之前。

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

发生了什么?

4

2 回答 2

4

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

class MyClass(object):

    def initStuff(self):
        pass

c = MyClass()
c.initStuff()

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

因此,显然您的代码在您定义的线程中静默失败。

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

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

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

在文档中阅读更多关于类的信息。

于 2012-08-11T21:08:21.093 回答
1

哦,我明白了,我只需要self作为参数传递给initStuff.

于 2012-08-11T20:39:05.983 回答