En plus des réponses publiées, je peux dire qu'un metaclass
définit le comportement d'une classe. Ainsi, vous pouvez définir explicitement votre métaclasse. Chaque fois que Python reçoit un mot-clé class
puis il commence à chercher le metaclass
. S'il n'est pas trouvé, le type de métaclasse par défaut est utilisé pour créer l'objet de la classe. En utilisant le __metaclass__
vous pouvez définir l'attribut metaclass
de votre classe :
class MyClass:
__metaclass__ = type
# write here other method
# write here one more method
print(MyClass.__metaclass__)
Le résultat sera le suivant :
class 'type'
Et, bien sûr, vous pouvez créer votre propre metaclass
pour définir le comportement de toutes les classes qui sont créées en utilisant votre classe.
Pour ce faire, il faut utiliser la méthode par défaut metaclass
doit être héritée car il s'agit de la principale classe de type metaclass
:
class MyMetaClass(type):
__metaclass__ = type
# you can write here any behaviour you want
class MyTestClass:
__metaclass__ = MyMetaClass
Obj = MyTestClass()
print(Obj.__metaclass__)
print(MyMetaClass.__metaclass__)
La sortie sera :
class '__main__.MyMetaClass'
class 'type'