Я прочитал довольно много материалов о правильном использовании super
с аргументами и без них, но есть кое-что, чего я не понимаю.
Рассмотрим следующий пример:
class A:
def foo(self):
pass
class B(A):
pass
Это часть, которую я понимаю:
super(B, B()) # <bound method A.foo of <__main__.B object at ...>>
, что имеет смысл, поскольку версия super
с двумя аргументами, со вторым аргументом, являющимся объектом, возвращает связанный объект.
Допустим, я хочу получить доступ к функции в A
, а не к привязанному методу. Я бы попробовал это:
super(B).foo # AttributeError: 'super' object has no attribute 'foo'
Это та часть, которую я не понимаю.
Попытка «обмануть» super
следующим образом работает, хотя:
super(B, B).foo # <function __main__.A.foo(self)>
Что мне не хватает?