Eine Geschichte, als ich von einem Projekt mit Python 3 abhängig war.
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.")
Es ist ein sehr einfaches Dienstprogramm, das Thread () und Event () zum Threading kombiniert. Lassen Sie die untergeordnete Klasse __run () überschreiben Der Verarbeitungsteil wurde nicht implementiert, damit er gut verwendet werden kann.
import time
from .ThreadRunner import ThreadRunner
class TimeWaiter(ThreadRunner):
def __init__(self):
super().__init__()
def __run(self):
while True:
#Einige Verarbeitung
time.sleep(1)
↑ So erben,
from TimeWaiter import TimeWaiter
waiter = TimeWaiter()
waiter.start()
Jetzt.
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.
Ich spucke einen Fehler aus. Es sollte überschrieben und deaktiviert worden sein Der Prozess des Auslösens von NotImplementedError () der übergeordneten Methode wird aufgerufen.
Als ich von einem Ende aus nach Informationen suchte, kam ich zu folgendem Artikel.
[Hinweis] Über die Rolle des Unterstrichs "_" in Python http://qiita.com/ikki8412/items/ab482690170a3eac8c76
Informationen zum Benennen von Python-Variablen und -Methoden (Unterstrich) https://teratail.com/questions/41277
Im Kommentarbereich des ersten Artikels und in der Antwort des zweiten Artikels gab es eine Antwort auf das, was ich Moos war. Wenn Sie am Anfang des Funktionsnamens oder des Variablennamens zwei Unterstriche einfügen, Der Name ändert sich im Inneren automatisch (er scheint Mangled zu heißen) und ist anders.
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.")
Die zuvor erwähnte ThreadRunner-Klasse ist gleichbedeutend mit der folgenden.
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:
#Einige Verarbeitung
time.sleep(1)
Unabhängig davon, wie viel die untergeordnete Klasse erbt, ändert sich der Name auf der Seite der übergeordneten Klasse. Es sollte nicht überschrieben werden.
In diesem Fall schien es besser, eine Unterstange zu haben. Wenn Sie eine Unterstange herstellen, funktioniert das Zerfleischen nicht. Es wird intern als Override behandelt.
Für diejenigen, die mit Python vertraut sind, ist es natürlich ... Ich habe gerade angefangen, es zu berühren, also war ich ziemlich süchtig danach und habe meine Zeit geschmolzen ...
Das ist alles für das Memorandum.
Recommended Posts