Мне было интересно, что происходит с методами, объявленными в метаклассе. Я ожидал, что, если вы объявите метод в метаклассе, он станет классом, однако поведение отличается. Пример
>>> class A(object):
... @classmethod
... def foo(cls):
... print "foo"
...
>>> a=A()
>>> a.foo()
foo
>>> A.foo()
foo
Однако, если я попытаюсь определить метакласс и дать ему метод foo, он, похоже, будет работать одинаково для класса, а не для экземпляра.
>>> class Meta(type):
... def foo(self):
... print "foo"
...
>>> class A(object):
... __metaclass__=Meta
... def __init__(self):
... print "hello"
...
>>>
>>> a=A()
hello
>>> A.foo()
foo
>>> a.foo()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'A' object has no attribute 'foo'
Что здесь происходит?
Изменить: наброси вопрос