Несвязанный супер объект, супер (я, я) - PullRequest
2 голосов
/ 24 сентября 2019

Я хотел бы спросить о

sup = super(self, self)

Python Cookbook 3rd от David Beazley & Brian K. Jones. Есть несколько таких примеров.Это сокращенный фрагмент кода из книги:

class MatchSignaturesMeta(type):
    def __init__(self, clsname, bases, clsdict):
        super().__init__(clsname, bases, clsdict)
        sup = super(self, self)  
        for name, value in clsdict.items():
        # ...
            prev_dfn = getattr(sup, name, None)
        # ...

class Root(metaclass=MatchSignaturesMeta):
    pass
class A(Root):
    def foo(self, x, y):
        pass
    # ...

в ходе эксперимента я знаю, что второй супер аргумент обязателен.sup печатается как:

<super: <class 'Root'>, <Root object>>

В документации super они говорят

"Если второй аргумент опущен, возвращаемый суперобъект является несвязанным."

«Связанный / несвязанный метод» (функция с 1-м параметром, связанным с экземпляром класса) знакома.Что такое «связанный объект»?

В примере создается класс Root.Я не вижу явного создания корневого объекта.Я хотел бы спросить, откуда появился объект Root (из вышеприведенного представления для печати выше)?

Использование Python 3.5.3 в Debian GNU / Linux 9.11 (stretch)

...