En Python, ¿cómo puede obtener el nombre de una clase de función miembro?

Tengo una función que toma otra función como parámetro. Si la función es miembro de una clase, necesito encontrar el nombre de esa clase. P.ej

def analyser(testFunc): print testFunc.__name__, 'belongs to the class, ... 

pensé

 testFunc.__class__ 

resolvería mis problemas, pero eso solo me dice que testFunc es una función.

 testFunc.im_class 

https://docs.python.org/reference/datamodel.html#the-standard-type-hierarchy

im_class es la clase de im_self para métodos enlazados o la clase que solicitó el método para métodos no enlazados

Desde Python 3.3, .im_class se ha ido. Puedes usar .__qualname__ en .__qualname__ lugar. Aquí está el PEP correspondiente: https://www.python.org/dev/peps/pep-3155/

 class C: def f(): pass class D: def g(): pass print(C.__qualname__) # 'C' print(Cf__qualname__) # 'Cf' print(CD__qualname__) #'CD' print(CDg__qualname__) #'CDg' 

No soy un experto en Python, pero ¿esto funciona?

 testFunc.__self__.__class__ 

Parece que funciona para los métodos enlazados, pero en su caso, puede estar usando un método independiente, en cuyo caso esto podría funcionar mejor:

 testFunc.__objclass__ 

Aquí está la prueba que utilicé:

 Python 2.5.2 (r252:60911, Jul 31 2008, 17:31:22) [GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import hashlib >>> hd = hashlib.md5().hexdigest >>> hd  >>> hd.__self__.__class__  >>> hd2 = hd.__self__.__class__.hexdigest >>> hd2  >>> hd2.__objclass__  

Oh sí, otra cosa:

 >>> hd.im_class Traceback (most recent call last): File "", line 1, in  AttributeError: 'builtin_function_or_method' object has no attribute 'im_class' >>> hd2.im_class Traceback (most recent call last): File "", line 1, in  AttributeError: 'method_descriptor' object has no attribute 'im_class' 

Así que si quieres algo a prueba de balas, debería manejar __objclass__ y __self__ también. Pero tu kilometraje puede variar.

los métodos de instancia tendrán atributos .im_class .im_func .im_self

http://docs.python.org/library/inspect.html#types-and-members

Probablemente quiera ver si la función tiene un .im_class y obtener la información de la clase desde allí.