目前我不是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调用派生方法有些问题,但我不知道发生了什么事。
发生了什么事?
答案 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
。