Как type .__ call__ узнает тип результата? - PullRequest
0 голосов
/ 28 июня 2019

Я хотел бы попросить следующий фрагмент кода:

class Meta(type):
    def __call__(self, *args):
        obj = super().__call__(*args)
        print('Meta specific __call__ actions')
        return obj

class Spam(metaclass=Meta):
    def __init__(self, *args):
        print('Spam.__init__(%r)' % args)

Как super () .__ call__ (super () означает здесь «type») знает, что должен создать экземпляр класса Spam? __call__ не получает аргументов, которые помог бы.

Спам является экземпляром Meta, поэтому Spam () должен вызывать Meta .__ call__. Мои рассуждения на этом заканчиваются. Спам ('foo') должен создать экземпляр спама. Пожалуйста, объясните, как в методе Meta .__ call__ это информация получена.

1 Ответ

2 голосов
/ 28 июня 2019

Спам является экземпляром Meta, этот экземпляр передается в параметре self в Meta.__call__.

Конструкция super() передает значение self в базовый метод;поэтому type.__call__ будет передано Spam через его параметр self.

...