Код: Выделить всё
# where I want to collect my decorated callbacks
cbs = []
# decorator to mark a callback to be collected
def my_deco(cb):
cbs.append(cb)
return cb
class C:
@my_deco
@classmethod
def cm(cls):
...
# execute the collected callbacks
for cb in cbs:
cb()
Я могу применить my_deco< /code> обычным функциям, и они собираются и вызываются обычным образом. Я также могу вызвать my_deco(C.cm) после определения C, и собранный метод будет доступен для обычного вызова.
В этом примере, однако, я хочу применить my_deco внутри определения класса C.
Я изо всех сил пытаюсь понять, как обнаружить
- это Я декорирую объект classmethod (банкомат. Я проверяю, isinstance(cb, classmethod), но не уверен, что это правильно.
- как получить сам класс C: если это экземпляр classmethod, насколько я понимаю, это «неограниченный» метод, например, для вызова требуется вручную установить параметр cls. Но я этого не делаю. знать, как получить C в реализации my_deco
Подробнее здесь: https://stackoverflow.com/questions/786 ... ted-method