EDIT: Notez que c'est une idée vraiment VRAIMENT à faire dans le code de production. C'était juste une chose intéressante pour moi. Ne fais pas ça à la maison!python modifier __metaclass__ pour le programme entier
Est-il possible de modifier la variable __metaclass__ pour l'ensemble du programme (interpréteur) en Python?
Cet exemple simple fonctionne:
class ChattyType(type):
def __init__(cls, name, bases, dct):
print "Class init", name
super(ChattyType, cls).__init__(name, bases, dct)
__metaclass__= ChattyType
class Data:
pass
data = Data() # prints "Class init Data"
print data
mais j'aimerais être en mesure de changer __metaclass__ de travailler même en sous-modules. Ainsi, par exemple (fichier m1.py):
class A:
pass
a=A()
print a
fichier
main.py:
class ChattyType(type):
def __init__(cls, name, bases, dct):
print "Class init", name
super(ChattyType, cls).__init__(name, bases, dct)
__metaclass__= ChattyType
import m1 # and now print "Class init A"
class Data:
pass
data = Data() # print "Class init Data"
print data
Je comprends que __metaclass__ mondiale ne fonctionne plus en Python 3.X, mais ce n'est pas ma préoccupation (mon code si preuve de concept). Donc, y a-t-il un moyen d'accomplir cela dans Python-2.x?
En effet magie noire, mais néanmoins intéressant :-) – Stan