Я пытаюсь понять метаклассы.metaclass `__call__` метод, не вызываемый при instanciation
я уже читал this answer и я пытался использовать пользовательские __call__
так:
#!/usr/bin/env python3
class MetaTest(type):
def __call__(cls, *args, **kwargs):
print("MetaTest.__call__ called.")
return super().__call__(cls, *args, **kwargs)
class Test:
__metaclass__ = MetaTest
if __name__ == '__main__':
Test()
я ожидал Test.__class__.__call__
называться в создании экземпляра, и Test.__class__
быть экземпляром MetaTest
, но это не так, поскольку У меня нет вывода при запуске этого скрипта.
So Почему не MetaTest.__call__
позвонил по номеру Test
instanciation?
Это не правильный синтаксис для использования метакласса в Python 3.x: https://docs.python.org/3.0/whatsnew/3.0.html#changed-syntax. Если вы исправите это, вы увидите, что метод get вызывается, как ожидалось. – jonrsharpe
@jonrsharpe Действительно! Я исправил его и вызывается '__class __.__ call__'. Все еще есть ошибка, но это другой вопрос, этот решается :). – vmonteco