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