AttributeError:'myThread'对象没有属性'_initialized'

时间:2013-03-09 22:04:04

标签: python multithreading python-3.x

在运行以下代码时,我知道为什么会出现以下错误:

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") 

1 个答案:

答案 0 :(得分:6)

根据documentation

,这很简单
  
    

一个帖子有一个名字。名称可以传递给构造函数,并通过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