Как сделать super () работает путем ручного заполнения ячейки __class__?

В Python 3 можно использовать super () вместо super (MyClass, self) , но это работает только в методы, которые были определены внутри класса. Как описано в Микеле Симионато ' В статье следующий пример не работает:

def __init__(self):
    print('calling __init__')
    super().__init__()

class C(object):
    __init__ = __init__

if __name__ == '__main__':
    c = C()

Не работает, потому что super () ищет ячейку __ class __ , которая в данном случае не определена.

Можно ли установить эту ячейку вручную после того, как функция была определена, или это невозможно?

К сожалению, я не понимаю, как ячейки работают в этом контексте (не нашел много документации по этому поводу). Я надеюсь на что-то вроде

__init__.__class_cell_thingy__ = C

. Конечно, я бы использовал это только в ситуации, когда назначение класса однозначно / уникально (в моем случае весь процесс добавления методов к классу автоматизирован, так что это было бы просто чтобы добавить такую ​​строку).

10
задан nikow 3 February 2011 в 11:16
поделиться