Я пытался узнать о метаклассах в Python. Я понял основную идею, но я не могу активировать механизм. Насколько я понимаю, вы можете указать M как метакласс при создании класса K, установив __metaclass__
в M на глобальном уровне или уровне класса. Чтобы проверить это, я написал следующую программу:
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)
Однако, когда я запускаю его, я получаю следующий вывод:
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
Разве я не вижу «Дождь в Испании» после 1 и 2? Что здесь происходит?