Получить определяющий класс объекта несвязанного метода в Python 3

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

В Python 2im_class Метод выполняет это красиво:

def decorator(method):
  cls = method.im_class
  cls.foo = 'bar'
  return method

Однако в Python 3 такого атрибута (или его замены) не существует. Я предполагаю, что идея состояла в том, что вы могли бы позвонитьtype(method.__self__) чтобы получить класс, но это не работает для несвязанных методов, так как__self__ == None в таком случае.

НОТА: Этот вопрос на самом деле немного неуместен для моего случая, так как вместо этого я решил установить атрибут для самого метода, а затем просканировать экземпляр во всех его методах, ища этот атрибут в соответствующее время. Я также (в настоящее время) использую Python 2.6. Тем не менее, мне любопытно, есть ли какая-либо замена для функциональности версии 2, и если нет, то каким было обоснование для ее полного удаления.

РЕДАКТИРОВАТЬЯ только что нашелэтот вопрос, Это создает впечатление, что лучшее решение - просто избегать его, как я. Я все еще задаюсь вопросом, почему это было удалено все же.

Ответы на вопрос(4)

Ваш ответ на вопрос