super(Snippet, self)
заставляет Python искать в MRO класса self (то есть self.__class__.mro()
для следующего класса, указанного после Snippet
. Возвращает super
объект, который действует как прокси для этого класса, то есть вызов метода для объекта super
действует как вызов метода для класса.
super(Snippet, self).save(...)
вызывает метод класса save
, с self
привязанным к первому аргументу.
То есть super(Snippet, self).save(...)
не будет вызывать Snippet
save
метод; он вызовет метод save
другого класса. Заманчиво думать, что этот «другой класс» является «родительским классом» или «суперклассом» Snippet
, то есть
models.Model
, но это не может быть правдой, и абсолютно неправильно воспринимать super
таким образом. Какой класс super(Snippet, self)
в конечном итоге представляет, зависит от self
и, в частности, от MRO его класса.
Очень хорошее описание MRO
и super
(в комплекте с картинками!) Можно найти здесь .