2008-11-20 9 views

Respuesta

11
testFunc.im_class 

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

im_class is the class of im_self for bound methods or the class that asked for the method for unbound methods

+0

sugerencia: cuando tienes un problema así, puedes usar "dir" en tu intérprete para ver qué método tiene o, mejor aún, ¡la finalización de la pestaña ipython! –

+0

Siempre llego un momento demasiado tarde en mis respuestas. Parece que no puedo encontrar esa estrofa de métodos definidos por el usuario en los nuevos documentos. +1 – JimB

+0

Gracias; tu solución funciona bien para el ejemplo que di. Desafortunadamente para mí, había simplificado demasiado mi problema real. He planteado esto en otra pregunta:

5

No soy un experto en Python, pero ¿funciona?

testFunc.__self__.__class__ 

Parece que funciona por métodos consolidados, pero en su caso, usted puede estar usando un método sin consolidar, en cuyo caso se puede trabajar mejor:

testFunc.__objclass__ 

Aquí está la prueba 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 
<built-in method hexdigest of _hashlib.HASH object at 0x7f9492d96960> 
>>> hd.__self__.__class__ 
<type '_hashlib.HASH'> 
>>> hd2 = hd.__self__.__class__.hexdigest 
>>> hd2 
<method 'hexdigest' of '_hashlib.HASH' objects> 
>>> hd2.__objclass__ 
<type '_hashlib.HASH'> 

Oh, sí, otra cosa:

>>> hd.im_class 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'builtin_function_or_method' object has no attribute 'im_class' 
>>> hd2.im_class 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
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.

+0

No, que le da el mensaje: "AttributeError: 'función' objeto no tiene atributo '__self__'". –

+0

Pruebe el atributo __objclass__ y vea si eso funciona. Si lo hace, entonces su función está libre. –

4

De python 3.3, .im_class se ha ido. Puede usar .__qualname__ en su 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(C.f.__qualname__) # 'C.f' 
print(C.D.__qualname__) #'C.D' 
print(C.D.g.__qualname__) #'C.D.g' 
Cuestiones relacionadas