多重继承以及python中的线程

时间:2012-11-14 14:34:03

标签: python multithreading inheritance

我有一个与以下

非常相似的代码示例
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和thread的init方法。有没有其他方法可以解决这个问题。

1 个答案:

答案 0 :(得分:4)

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

使用super()的全部意义在于将呼叫传递给父母合作社。在您的特定MRO中,FirstClass列在threading.Thread之前,因此,如果没有明确调用MRO顺序中的下一个__init__,则永远不会调用threading.Thread.__init__()

您可能希望查看关于super()在此背景下如何运作的优秀PyCon 2015 presentation by Raymond Hettinger