Как я могу назвать супер в декораторе метода в Python 3?

Как я могу заполнить ??? ?

 def ensure_finished(iterator): try: next(iterator) except StopIteration: return else: raise RuntimeError def derived_generator(method): def new_method(self, *args, **kwargs): x = method(self, *args, **kwargs) y = getattr(super(???, self), method.__name__)\ (*args, **kwargs) for a, b in zip(x, y): assert a is None and b is None yield ensure_finished(x) ensure_finished(y) return new_method 

One Solution collect form web for “Как я могу назвать супер в декораторе метода в Python 3?”

EDIT: Это не работает по причинам, указанным в комментариях. Я оставлю это здесь, чтобы следующий парень, пытающийся ответить, не делает то же самое (пока не появится реальный ответ).

Вы должны использовать type(self)

Пример: я немного упростил ваш код, но сущность все равно должна быть там

 def derived_generator(method): def new_method(self, *args, **kwargs): x = method(self, *args, **kwargs) y = getattr(super(type(self), self), method.__name__)\ (*args, **kwargs) for a, b in zip(y, x): yield a, b return new_method class BaseClass(object): def iterator(self): return [1, 2, 3] class ChildClass(BaseClass): @derived_generator def iterator(self): return [4, 5, 6] a = ChildClass() for x in a.iterator(): print(x) 
  • Как я могу сортировать этот словарь в алфавитном порядке?
  • Как получить параметры подписи вызываемого или надежно определить, когда это невозможно?
  • В чем разница между классами tkinter Tk и Toplevel?
  • Невозможно установить / обновить пакеты с помощью python-pip (« Not a directory»)
  • Python <Нет такого файла или каталога: ошибка 'gs'> даже с GhostScript, установленным на Macintosh * Проблема все еще сохраняется! *
  • Блокировка байтов (не строк) в Python 2 и 3
  • Python 2 и 3 совместимые модули пространства имен (с использованием pip)
  • Мой сценарий IDLE возвращает странную ошибку
  • Отправка пароля через SSH или SCP с помощью подпроцесса.
  • Power set и Cartesian Продукт набора python
  • Случайно установлен python 3.5 vs. python3.5: Это плохо?
  • Python - лучший язык программирования в мире.