<filename>thread.py
from threading import Thread


#we'll inherit the subclass and modify it to return a value when join is used.
class Threads(Thread):
    def __init__(self, group= None, target= None, name= None, args= (), kwargs= None, *, daemon= None):
        Thread.__init__(self, group, target, name, args, kwargs, daemon= daemon)
        self._return= None

    def run(self):
        if self._target is not None:
            self._return = self._target(*self._args, **self._kwargs)

    def join(self):
        Thread.join(self)
        return self._return
    
    def args(self):
        return self._args
<filename>thread.py
from threading import Thread


#we'll inherit the subclass and modify it to return a value when join is used.
class Threads(Thread):
    def __init__(self, group= None, target= None, name= None, args= (), kwargs= None, *, daemon= None):
        Thread.__init__(self, group, target, name, args, kwargs, daemon= daemon)
        self._return= None

    def run(self):
        if self._target is not None:
            self._return = self._target(*self._args, **self._kwargs)

    def join(self):
        Thread.join(self)
        return self._return
    
    def args(self):
        return self._args
#we'll inherit the subclass and modify it to return a value when join is used.