我有一个与以下
非常相似的代码示例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方法。有没有其他方法可以解决这个问题。
答案 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。