6

我有一个与以下非常相似的代码示例

import threading
import datetime
import time
import sys

class FirstClass(object):
    def __init__(self):
        print 'initialized'

class ThreadClass(FirstClass, threading.Thread):
    def __init__(self):
        super(ThreadClass, self).__init__()
        print 'initialized2'

    def run(self):
        time.sleep(1)
        now = datetime.datetime.now()
        sys.stdout.write("%s says Hello World at time: %s \n" % (self.getName(), now))

for i in range(20):
    t = ThreadClass()
    t.start()

由于 python 的 call-next-method,我无法同时运行 FirstClass 和线程的 init 方法。有没有其他方法可以解决这个问题。

4

1 回答 1

4

您还需要调用初始化程序super(FirstClass, self).__init__()FirstClass.__init__()

使用的全部目的super()是将调用传递给父合作社。在您的特定 MROFirstClass之前列出threading.Thread,因此如果没有显式调用__init__MRO 顺序中的下一个,则threading.Thread.__init__()永远不会被调用。

您可能想查看Raymond Hettinger 的 PyCon 2015 演示文稿,了解如何super()在这种情况下工作。

于 2012-11-14T14:36:49.260 回答