(Notes personnelles) Métaclasses et métaprogrammation Python

La classe (ou la déclaration de classe) est un objet principal

référence:

Déclarer une classe équivaut à créer une instance de la classe de type.

 class C: ... ≡ C = type('C', ...)

Personnaliser la génération de classe

référence:

La spécification metaclass personnalise cette instanciation de type. Vous pouvez personnaliser la génération de classe lorsqu'une classe est déclarée en déclarant la métaclasse M comme une sous-classe de type et en remplaçant la méthode __new__:

class C(metaclass=M): ...

Nous supposons qu'il n'est pas possible de forcer l'application de «M» lorsque toutes les classes sont générées [enquête requise].

Personnalisation de l'instanciation

référence:

La personnalisation de l'instanciation se fait en définissant (écrasant) les classes «new» et «init». En particulier, en personnalisant «new», il est possible de générer et de renvoyer des instances de classe autres que la classe destinée à être générée («C» de «c = C (...)»). Cela peut être utilisé, par exemple, pour implémenter des classes d'usine. D'autre part, comme vous le savez, __init__ est utilisé pour initialiser l'instance créée (définir les propriétés, etc.).

Non enquêté: __prepare__

Je vais enquêter cette fois.

Recommended Posts

(Notes personnelles) Métaclasses et métaprogrammation Python
notes personnelles python
notes personnelles en python manquantes
Notes sur Python et les types de dictionnaire
Notes personnelles pour le traitement d'images python
Notes personnelles de prétraitement des données Python Pandas
Notes utilisant cChardet et python3-chardet dans Python 3.3.1.
Grattage WEB avec Python (pour mémo personnel)
Remarques sur la construction de Python et pyenv sur Mac
Notes personnelles et liens sur l'apprentissage automatique ① (Machine learning)
(Python) Remarques sur la lecture de HTML et l'utilisation d'expressions régulières
Parler des attributs de classe Python et des métaclasses
Mémo de raclage Python
Métaprogrammation avec Python
Note d'apprentissage Python_000
Notes d'apprentissage Python
Notes de débutant Python
Note d'apprentissage Python_006
notes de python C ++
Note d'apprentissage Python_005
Notes de grammaire Python
Note sur la bibliothèque Python
Python pour moi-même Q.A
mémo pandas python
Note d'apprentissage Python_001
notes d'apprentissage python
Notes d'installation de Python3.4
Remarques sur l'installation de Python3 et l'utilisation de pip sous Windows7
Notes personnelles sur le code doc Python dans Sphinx
[python] Compresser et décompresser
Astuces Python et Numpy
[Python] pip et roue
Résumé des notes personnelles des pandas
Implémentation de List et Bool en Python et SQLite3 (note personnelle)
Remarques sur le traitement d'images HDR et RAW avec Python
Paquets et modules Python
Intégration Vue-Cli et Python
Manipuler des fichiers Excel à partir de python avec xlrd (mémo personnel)
Ruby, Python et carte
Mémorandum Python (signet personnel)
notes d'utilisation du décorateur python
entrée et sortie python
Python et Ruby se séparent
Notes sur le format Python Pickle
Premier mémo divers sur Python
Matlab => Notes de migration Python
Remarques sur l'affectation Python3
Notes personnelles sur l'intégration de vscode et anaconda
Notes sur l'utilisation de sous-processus Python
Python asyncio et ContextVar
Python essayer / sauf mémo
Notes sur le flacon de framework Python
Remarques sur le déploiement de pyenv avec Homebrew et la gestion des versions de Python
[Python] Notes sur les instructions while (style d'écriture et boucle infinie)
Notes sur la lecture et l'écriture d'images TIFF float32 avec python
mémo python utilisant l'opérateur perl-ternaire