[Hinweis] Eine Geschichte über den Versuch, eine Klassenmethode mit zwei Unterbalken in der Python 3-Serie zu überschreiben.

Eine Geschichte, als ich von einem Projekt mit Python 3 abhängig war.

Angenommen, Sie haben eine Klasse wie diese


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.

Ich habe es tatsächlich geerbt und versucht, es zu bewegen.

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.

Funktionen / Variablen mit zwei Unterstrichen am Anfang scheinen etwas Besonderes zu sein

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

[Hinweis] Eine Geschichte über den Versuch, eine Klassenmethode mit zwei Unterbalken in der Python 3-Serie zu überschreiben.
Eine Geschichte über den Versuch, private Variablen in Python zu implementieren.
Eine verwirrende Geschichte mit zwei Möglichkeiten, XGBoost in Python + zu implementieren
Eine Geschichte über das Ausprobieren eines (Golang +) Python-Monorepo mit Bazel
Eine Geschichte über den Versuch, Linter mitten in einem Python (Flask) -Projekt vorzustellen
Eine Geschichte darüber, wie man einen relativen Pfad in Python angibt.
Verwendung der Methode __call__ in der Python-Klasse
[Python] Hinweise beim Versuch, Numpy mit Cython zu verwenden
[Django] Eine Geschichte über das Feststecken in einem Sumpf beim Versuch, einen Reißverschluss mit einem Formular zu validieren [TDD]
Eine Geschichte über das Hinzufügen einer REST-API zu einem mit Python erstellten Daemon
Eine Geschichte über den Versuch, mehrere Python-Versionen auszuführen (Mac Edition)
Versuch, SQLite3 mit Python zu handhaben [Hinweis]
[Hinweis] Erstellen Sie mit Python eine einzeilige Zeitzonenklasse
Datenanalyse in Python: Ein Hinweis zu line_profiler
[Anmerkung] Eine Geschichte darüber, dass es nicht möglich ist, den Proxy mit pip zu durchbrechen
[Python] Erstellt eine Klasse, um mit pyaudio Sinuswellen im Hintergrund zu spielen
So konvertieren / wiederherstellen Sie einen String mit [] in Python
Die Geschichte, mit Python eine Hanon-ähnliche Partitur zu machen
Ich möchte mit einem Roboter in Python arbeiten.
Beachten Sie beim Initialisieren einer Liste in Python
[Python] Erstellt eine Methode zum Konvertieren von Radix in 1 Sekunde
Eine Geschichte darüber, wie Windows 10-Benutzer eine Umgebung für die Verwendung von OpenCV3 mit Python 3.5 erstellt haben
Ich blieb stecken, als ich versuchte, einen relativen Pfad mit relative_to () in Python anzugeben
Eine Geschichte über einen Python-Anfänger, der versucht, Google-Suchergebnisse mithilfe der API abzurufen
Ich habe versucht, eine Klasse für die Suche nach Dateien mit der Glob-Methode von Python in VBA zu erstellen
Verwendung der Python-Multiprocessing (Fortsetzung 3) apply_async in einer Klasse mit Pool als Mitglied
Ein Hinweis zum Aufrufen der Facebook-API mit dem Python SDK
Ich habe ein Paket erstellt, um Zeitreihen mit Python zu filtern
Eine Geschichte über den Wettbewerb mit einem Freund in Othello AI Preparation
Ich habe eine Klasse erstellt, um das Analyseergebnis von MeCab in ndarray mit Python zu erhalten
Ich habe versucht "Wie man eine Methode in Python dekoriert"
Eine Geschichte über einen Amateur, der mit Python (Kivy) einen Blockbruch macht ②
Eine Geschichte über den Umgang mit dem CORS-Problem
Erstellen einer Entwicklungsumgebung für die Python2.7-Serie mit Vagrant
Maschinelles Lernen Eine Geschichte über Menschen, die mit GBDT in GBDT in Python nicht vertraut sind
Eine Geschichte über einen Amateur, der mit Python (Kivy) einen Blockbruch macht ①
So überschreiben Sie eine benutzerdefinierte Typmethode, die von Python Swig generiert wird
Ein Hinweis zu [Python] __debug__
Eine Geschichte über einen Python-Anfänger, der mit dem No-Modul'http.server 'feststeckt.
Eine Geschichte, die nicht funktioniert hat, als ich versucht habe, mich mit dem Python-Anforderungsmodul anzumelden
Eine Geschichte über alles von der Datenerfassung über die KI-Entwicklung bis hin zur Veröffentlichung von Webanwendungen in Python (3. KI-Entwicklung)
Beachten Sie, was Sie getan haben, um Flycheck mit Python zu verwenden
[Road to Intermediate Python] Rufen Sie eine Klasseninstanz wie eine Funktion mit __call__ auf
Eine Geschichte über den Versuch, einen Chot zu automatisieren, wenn Sie selbst kochen
Eine Geschichte über die Entwicklung eines weichen Typs mit Firestore + Python + OpenAPI + Typescript
Python: Ein Hinweis zu Klasse 1 "Abstract"
Hinweis zu get_scorer von sklearn
[Python] Erbt eine Klasse mit Klassenvariablen
Ein Hinweis zu Mock (Python-Mock-Bibliothek)
Eine Geschichte über den Versuch, den Testprozess eines 20 Jahre alten Systems in C zu verbessern
Eine Geschichte, die es aufgegeben hat, JavaScripthon unter Windows auszuführen.
[Kleine Geschichte] So speichern Sie Matplotlib-Diagramme in einem Stapel mit Jupyter
Hinweis: [Python3] Konvertiert datetime in eine Zeichenfolge in einem beliebigen Format
Eine Geschichte, die ich süchtig danach war, eine Video-URL mit Tweepy zu bekommen
Beachten Sie, dass Djangos Runserver in Python 2.7.11, das mit Homebrew geliefert wird, Moos ist