AttributeError: object 'myThread' does not have attribute '_initialized'

Any idea why I am getting the following error when running the code below:

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' 

code:

 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") 
+4
source share
1 answer

This is just as per the documentation :

There is a name in the stream. The name can be passed to the constructor and read or changed using the name attribute.

and

 class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}) 

So, you are trying to set an attribute, which probably should be set in a certain way, through the class constructor. In fact, if you check the source code of the Thread class <:

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

All you need to change is call Thread.__init__(name=name) little earlier:

 class myThread(threading.Thread): def __init__(self, threadID, name, counter): threading.Thread.__init__(self, name=name) self.threadID = threadID self.counter = counter 
+6
source

All Articles