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.