在运行以下代码时,我知道为什么会出现以下错误:
Traceback (most recent call last):
File "C:\pytests\mthread1.py", line 25, in <module>
thread1 = myThread(1, "Thread-1", 1)
File "C:\pytests\mthread1.py", line 9, in __init__
self.name = name
AttributeError: 'myThread' object has no attribute '_initialized'
代码:
import time
import threading
exitFlag = 0
class myThread(threading.Thread):
def __init__(self, threadID, name, counter):
self.threadID = threadID
self.name = name
self.counter = counter
threading.Thread.__init__(self)
def run(self):
print("Starting ", self.name)
print_time(self.name, self.counter, 5)
print("Exiting ", self.name)
def print_time(threadName, delay, counter):
while counter:
if exitFlag:
thread.exit()
time.sleep(delay)
print("{}: {}" . format(threadName, time.ctime(time.time())))
counter -= 1
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)
thread1.start()
thread2.start()
print("Exiting Main Thread")
答案 0 :(得分:6)
一个帖子有一个名字。名称可以传递给构造函数,并通过name属性读取或更改。
和
class threading.Thread(group=None, target=None, name=None, args=(), kwargs={})
所以,你试图通过类构造函数设置一个可能以某种方式设置的属性。实际上,如果您查看Thread
班级source code:
@property
def name(self):
assert self._initialized, "Thread.__init__() not called"
return self._name
@name.setter
def name(self, name):
assert self._initialized, "Thread.__init__() not called"
self._name = str(name)
所有你必须改变 - 稍早调用Thread.__init__(name=name)
:
class myThread(threading.Thread):
def __init__(self, threadID, name, counter):
threading.Thread.__init__(self, name=name)
self.threadID = threadID
self.counter = counter