Obter a classe de definição do objeto de método não acoplado no Python 3
Digamos que eu queira criar um decorador para os métodos definidos em uma classe. Desejo que esse decorador, quando chamado, possa definir um atributo na classe que define o método (para registrá-lo em uma lista de métodos que atendem a um propósito específico).
No Python 2, oim_class
O método realiza isso muito bem:
def decorator(method):
cls = method.im_class
cls.foo = 'bar'
return method
No entanto, no Python 3, esse atributo (ou um substituto para ele) parece existir. Suponho que a ideia era que você poderia ligartype(method.__self__)
para obter a classe, mas isso não funciona para métodos não acoplados, pois__self__ == None
nesse caso.
NOTA: Essa pergunta é realmente um pouco irrelevante para o meu caso, já que decidi definir um atributo no próprio método e fazer com que a instância varra todos os métodos que procuram esse atributo no momento apropriado. Também estou (atualmente) usando o Python 2.6. No entanto, estou curioso para saber se há algum substituto para a funcionalidade da versão 2 e, se não, qual foi o motivo para removê-lo completamente.
EDITAR: Acabei de encontraressa questão. Isso faz parecer que a melhor solução é apenas evitá-la como eu. Ainda estou me perguntando por que foi removido.