So schreiben Sie eine Meta-Klasse, die sowohl Python2 als auch Python3 unterstützt

Die Syntax für die Verwendung der Metaklasse unterscheidet sich zwischen python2.x und python3.x. Auf der anderen Seite möchten Sie möglicherweise beide Versionen in einer Datei unterstützen. Wie schreibe ich in einem solchen Fall.

metaclass(HasVersion)

Es gibt die folgende Metaklasse HasVersionMeta. Eine Meta-Klasse, die einfach eine Zeichenfolge wie eine Versionsnummer hat.

class HasVersionMeta(type):
    def __new__(cls, name, bases, attrs):
        attrs["version"] = "0.0.1"
        return super(HasVersionMeta, cls).__new__(cls, name, bases, attrs)

Ich möchte eine Klasse definieren, die dies verwendet.

Für Python3

Fügen Sie im Fall von python3 die Metaklassenoption zu dem Teil des Arguments hinzu, der zum Zeitpunkt der Vererbung übergeben wurde.

class A(object, metaclass=HasVersionMeta):
    pass

Für Python2

Weisen Sie Python2 einem Hook mit einem speziellen Namen metaclass zu

class A(object):
    __metaclass__ = HasVersionMeta

Bei der Unterstützung beider

Die als Metaklasse verwendete Klasse ist auch ein aufrufbares Objekt. Es sollte dieselbe Funktionalität haben, wenn man bedenkt, dass der übergeordnete Klassentyp () beim dynamischen Generieren einer Klasse verwendet wird. Sie können also wie folgt schreiben.

HasVersion = HasVersionMeta("A", (object, ), {"__doc__": HasVersionMeta.__doc__})


class A(HasVersion):
    pass

Arbeiten.

print(A.version)
# 0.0.1

Recommended Posts

So schreiben Sie eine Meta-Klasse, die sowohl Python2 als auch Python3 unterstützt
[Python] So schreiben Sie eine Dokumentzeichenfolge, die PEP8 entspricht
So schreiben Sie einen Listen- / Wörterbuchtyp von Python3
So verwalten Sie eine README-Datei für Github und PyPI
[Python] Wie man mit Klassenvariablen mit Dekorator und Metaklasse spielt
So schreiben Sie einen Test für die Verarbeitung mit BigQuery
So starten Sie einen einfachen WEB-Server, der CGI von PHP und Python ausführen kann
[Python] So fügen Sie einer Tabelle Zeilen und Spalten hinzu (pandas DataFrame)
So erstellen Sie eine Überwachungskamera (Überwachungskamera) mit Opencv und Python
Schreiben Sie ein Programm, das das Programm missbraucht und 100 E-Mails sendet
Eine Kurzanleitung zu PyFlink, die Apache Flink und Python kombiniert
So verpacken und verteilen Sie Python-Skripte
Qiita (1) Wie schreibe ich einen Codenamen?
[Python] So konvertieren Sie eine zweidimensionale Liste in eine eindimensionale Liste
So schreiben Sie Python-Dokumentkommentare (Docstrings)
Wie bekomme ich Stacktrace in Python?
Python: Verwendung von Einheimischen () und Globalen ()
[Python] Berechnen von MAE und RMSE
Verwendung von Python zip und Aufzählung
Komprimieren Sie Python-Daten und schreiben Sie in SQLite
Verwendung ist und == in Python
Wie schreibe ich Ruby to_s in Python
So führen Sie Maya Python-Skripte aus
Wie schreibe ich pydoc und mehrzeilige Kommentare
So rufen Sie eine POST-Anfrage auf, die Japanisch (Shift-JIS) mit Anfragen unterstützt
So schreiben Sie den richtigen Shebang in Perl-, Python- und Ruby-Skripten
Ein Memorandum darüber, wie man Pandas schreibt, das ich persönlich oft vergesse
So setzen Sie in Python ein Leerzeichen mit halber Breite vor Buchstaben und Zahlen.
Verwendung von hmmlearn, einer Python-Bibliothek, die versteckte Markov-Modelle realisiert
[Einführung in Python] So schreiben Sie eine Zeichenfolge mit der Formatierungsfunktion
So stoppen Sie das Programm bis zu einem bestimmten Datum und einer bestimmten Uhrzeit in Python
Lesen einer CSV-Datei mit Python 2/3
So öffnen Sie einen Webbrowser über Python
So löschen Sie einen Taple in einer Liste (Python)
So generieren Sie eine Sequenz in Python und C ++
Einbetten von Variablen in Python-Strings
So erstellen Sie eine JSON-Datei in Python
[Python] Lesen von Daten aus CIFAR-10 und CIFAR-100
So generieren Sie ein Python-Objekt aus JSON
Warum muss Python einen Doppelpunkt schreiben?
So schreiben Sie einen ShellScript Bash für Anweisung
So benachrichtigen Sie Discord-Kanäle in Python
Python: Erstellen Sie eine Klasse, die entpackte Zuweisungen unterstützt
[Python] Verwendung von Hash-Funktion und Taple.
[Python] Wie zeichnet man mit Matplotlib ein Histogramm?
Wie schreibe ich ein benanntes Tupeldokument im Jahr 2020?
[Go] So schreiben oder rufen Sie eine Funktion auf
Ich möchte mit Python in eine Datei schreiben
So schreiben Sie eine ShellScript-Bash-Case-Anweisung
Wie man Autokorrelation und partielle Autokorrelation mit Python zeichnet
So schreiben Sie Umgebungsvariablen, die Sie nicht in [GitHub] Python einfügen möchten
[Python] Kombinieren von Listen mit Zahlen zu Zeichenfolgen und Schreiben in eine Ausgabedatei
So installieren Sie die Python-Bibliothek, die von Pharmaunternehmen verwendet werden kann
Ich möchte ein Programm ausführen und verteilen, das die Größe von Bildern in Python3 + Pyinstaller ändert
[Python] So erstellen Sie eine lokale Webserverumgebung mit SimpleHTTPServer und CGIHTTPServer
So installieren Sie Python