多重继承以及python中的线程

raj*_*aju 6 python inheritance multithreading

我有一个代码示例,非常类似于以下

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()
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 4

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

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

您可能想看看Raymond Hettinger 在 PyCon 2015 上的精彩演讲,了解在这种情况下如何super()工作。