Une histoire où j'étais accro à un projet utilisant la série Python 3.
import threading
class ThreadRunner(object):
def __init__(self):
self.__thread = None
self.__event = threading.Event()
def start(self):
self.__event.clear()
self.__thread = threading.Thread(self.__run)
def stop(self):
self.__event.set()
self.__thread.join()
self.__thread = None
def is_running(self):
return not self.__event.is_set()
def __run(self):
raise NotImplementedError("class is abstract.")
C'est un utilitaire très simple qui combine Thread () et Event () pour le threading. Demandez à la classe enfant de remplacer __run () La partie traitement n'a pas été mise en œuvre pour pouvoir être utilisée correctement.
import time
from .ThreadRunner import ThreadRunner
class TimeWaiter(ThreadRunner):
def __init__(self):
super().__init__()
def __run(self):
while True:
#Certains traitements
time.sleep(1)
↑ Hériter comme ça,
from TimeWaiter import TimeWaiter
waiter = TimeWaiter()
waiter.start()
Maintenant.
Exception in thread Thread-1:
Traceback (most recent call last):
File "C:\Program Files\Python36\lib\threading.py", line 916, in _bootstrap_inner
self.run()
File "C:\Program Files\Python36\lib\threading.py", line 864, in run
self._target(*self._args, **self._kwargs)
File "C:\test\ThreadRunner.py", line 23, in __run
raise NotImplementedError("class is abstract.")
NotImplementedError: class is abstract.
Je crache une erreur. Il aurait dû être remplacé et désactivé Le processus de lancement de NotImplementedError () de la méthode parent est appelé.
Lorsque j'ai recherché des informations à une extrémité, je suis arrivé à l'article suivant.
[Note] À propos du rôle du trait de soulignement "_" en Python http://qiita.com/ikki8412/items/ab482690170a3eac8c76
À propos de l'attribution de noms aux variables et méthodes Python (trait de soulignement) https://teratail.com/questions/41277
Dans la section commentaires du premier article et la réponse du deuxième article, il y avait une réponse à ce que j'étais de la mousse. Si vous ajoutez deux traits de soulignement au début du nom de la fonction ou du nom de la variable, Le nom changera automatiquement à l'intérieur (il semble s'appeler Mangled), et ce sera différent.
class ThreadRunner(object):
def __init__(self):
self.__thread = None
self.__event = threading.Event()
def start(self):
self.__event.clear()
self.__thread = threading.Thread(self.__run)
def stop(self):
self.__event.set()
self.__thread.join()
self.__thread = None
def is_running(self):
return not self.__event.is_set()
def __run(self):
raise NotImplementedError("class is abstract.")
La classe ThreadRunner mentionnée précédemment est synonyme de ce qui suit.
class TimeWaiter(object):
def __init__(self):
self.__thread = None
self.__event = threading.Event()
def start(self):
self.__event.clear()
self.__thread = threading.Thread(self.ThreadRunner__run)
def stop(self):
self.__event.set()
self.__thread.join()
self.__thread = None
def is_running(self):
return not self.__event.is_set()
def ThreadRunner__run(self):
raise NotImplementedError("class is abstract.")
def TimeWaiter__run(self):
while True:
#Certains traitements
time.sleep(1)
Peu importe combien la classe enfant hérite, le nom changera du côté de la classe parent. Ce n'était pas censé être annulé.
Dans ce cas, il semblait préférable d'avoir un underbar. En faisant un underbar, le mangling ne fonctionnera pas, Il sera traité comme un remplacement en interne.
Pour ceux qui connaissent Python, c'est naturel ... Je viens de commencer à le toucher, donc j'y étais assez accro et j'ai fait fondre mon temps ...
C'est tout pour le mémorandum.