I am trying to learn about metaclasses in Python. I get the basic idea, but I cannot activate the mechanism. As I understand it, you can specify M as a metaclass when building class K by setting __metaclass__ to M at the global or class level. To test this, I wrote the following program:
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)
However, when I run it, I get the following output:
C: \ Documents and Settings \ Daniel Wong \ Desktop> python --version
Python 3.0.1
C: \ Documents and Settings \ Daniel Wong \ Desktop> python meta.py
one
2
3
The rain in Spain
4
Can't I see "rain in Spain" after 1 and 2? What's going on here?
allyourcode
source share