J'ai essayé d'en apprendre davantage sur les métaclasses en Python. J'ai l'idée principale, mais je n'arrive pas à activer le mécanisme. Si je comprends bien, vous pouvez spécifier M comme étant la métaclasse lors de la construction d'une classe K en mettant __metaclass__
à M au niveau global ou de la classe. Pour tester cela, je l'ai écrit le programme suivant:__metaclass__ ne devrait-il pas forcer l'utilisation d'une métaclasse en Python?
p = print
class M(type):
def __init__(*args):
type.__init__(*args)
print("The rain in Spain")
p(1)
class ClassMeta:
__metaclass__ = M
p(2)
__metaclass__ = M
class GlobalMeta: pass
p(3)
M('NotMeta2',(), {})
p(4)
Cependant, quand je le lance, je reçois la sortie suivante:
C:\Documents and Settings\Daniel Wong\Desktop>python --version Python 3.0.1 C:\Documents and Settings\Daniel Wong\Desktop>python meta.py 1 2 3 The rain in Spain 4
Si je ne vois pas « La pluie en Espagne » après 1 et 2? Que se passe t-il ici?
Le double négatif "ne force pas" est difficile à analyser. Pourriez-vous résoudre la question, s'il vous plaît? –
Merci pour les commentaires. Je pense que cela devrait être plus facile à comprendre maintenant. – allyourcode