Comment écrire une classe méta qui prend en charge à la fois python2 et python3

La syntaxe d'utilisation de la métaclasse est différente entre python2.x et python3.x. D'autre part, vous souhaiterez peut-être prendre en charge les deux versions dans un seul fichier. Comment écrire dans un tel cas.

metaclass(HasVersion)

Il existe la métaclasse suivante HasVersionMeta. Une méta classe qui a simplement une chaîne comme un numéro de version.

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

Je veux définir une classe qui l'utilise.

Pour python3

Dans le cas de python3, ajoutez l'option metaclass à la partie de l'argument passée au moment de l'héritage.

class A(object, metaclass=HasVersionMeta):
    pass

Pour python2

Pour python2, assignez-le à un hook avec un nom spécial metaclass

class A(object):
    __metaclass__ = HasVersionMeta

Lorsque vous soutenez les deux

La classe utilisée comme métaclasse est également un objet appelable. Étant donné que le type de classe parent () est utilisé lors de la génération dynamique d'une classe, il doit avoir la même fonction. Vous pouvez donc écrire comme suit.

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


class A(HasVersion):
    pass

Fonctionner.

print(A.version)
# 0.0.1

Recommended Posts

Comment écrire une classe méta qui prend en charge à la fois python2 et python3
[Python] Comment écrire une docstring conforme à PEP8
Comment écrire un type liste / dictionnaire de Python3
Comment gérer un README pour github et PyPI
[Python] Comment jouer avec les variables de classe avec décorateur et métaclasse
Comment rédiger un test de traitement utilisant BigQuery
Comment démarrer un serveur WEB simple qui peut exécuter des cgi de php et python
[Python] Comment ajouter des lignes et des colonnes à une table (pandas DataFrame)
Comment créer une caméra de surveillance (caméra de sécurité) avec Opencv et Python
Ecrire un programme qui abuse du programme et envoie 100 e-mails
Un guide rapide de PyFlink qui combine Apache Flink et Python
Comment empaqueter et distribuer des scripts Python
Qiita (1) Comment écrire un nom de code
[Python] Comment convertir une liste bidimensionnelle en liste unidimensionnelle
Comment écrire des commentaires de document Python (Docstrings)
Comment obtenir stacktrace en python
python: Comment utiliser les locals () et globals ()
[Python] Comment calculer MAE et RMSE
Comment utiliser le zip Python et énumérer
Compressez les données python et écrivez sur sqlite
Comment utiliser is et == en Python
Comment écrire Ruby to_s en Python
Comment exécuter des scripts Maya Python
Comment écrire des commentaires pydoc et multi-lignes
Comment appeler une requête POST prenant en charge le japonais (Shift-JIS) avec des requêtes
Comment écrire le bon shebang dans les scripts Perl, Python et Ruby
Un mémorandum sur la façon d'écrire des pandas que j'ai tendance à oublier personnellement
Comment mettre un espace demi-largeur avant les lettres et les chiffres en Python.
Comment utiliser hmmlearn, une bibliothèque Python qui réalise des modèles de Markov cachés
[Introduction à Python] Comment écrire une chaîne de caractères avec la fonction format
Comment arrêter le programme jusqu'à une date et une heure spécifiques en python
Comment lire un fichier CSV avec Python 2/3
Comment ouvrir un navigateur Web à partir de python
Comment effacer un taple dans une liste (Python)
Comment générer une séquence en Python et C ++
Comment incorporer des variables dans des chaînes python
Comment créer un fichier JSON en Python
[Python] Comment lire les données de CIFAR-10 et CIFAR-100
Comment générer un objet Python à partir de JSON
Pourquoi Python doit-il écrire un deux-points?
Comment écrire une instruction ShellScript Bash for
Comment notifier les canaux Discord en Python
Python: créer une classe qui prend en charge l'affectation décompressée
[Python] Comment utiliser la fonction de hachage et taple.
[Python] Comment dessiner un histogramme avec Matplotlib
Comment écrire un document tuple nommé en 2020
[Go] Comment écrire ou appeler une fonction
Je veux écrire dans un fichier avec Python
Comment écrire une instruction de cas bash ShellScript
Comment tracer l'autocorrélation et l'autocorrélation partielle avec Python
Comment écrire des variables d'environnement que vous ne voulez pas mettre sur [GitHub] Python
[Python] Combiner des listes contenant des nombres en chaînes et les écrire dans un fichier de sortie
Comment installer la bibliothèque Python qui peut être utilisée par les sociétés pharmaceutiques
Je veux exécuter et distribuer un programme qui redimensionne les images Python3 + pyinstaller
[Python] Comment créer un environnement de serveur Web local avec SimpleHTTPServer et CGIHTTPServer
Comment installer Python