Type function

Chema Cortes pych3m4 en gmail.com
Jue Dic 28 19:56:09 CET 2006


El 28/12/06, Oswaldo Hernández<listas en soft-com.es> escribió:
> Al final he creado una pequeña funcion para realizar la evaluación que comprueba funciones y metodos
>   de clase:
>
>
>  >>> def EsFuncion(f):
> ...     return type(f) is types.FunctionType or type(f) is types.MethodType
> ...
>  >>> def f():
> ...     pass
> ...
>  >>>
>  >>> class c:
> ...     def f(self):
> ...         pass
> ...
>  >>> c1 = c()
>  >>>
>  >>> EsFuncion(f)
> True
>  >>> EsFuncion(c1.f)
> True
>  >>>

Si quieres mejorar tu función, indicarte que el chequeo de tipos, en
general, se recomienda hacerlo con isinstance o issubclass.

  isinstance(<objeto>, <tipo>)  ó  issubclass(type(<objeto>),<tipo>)

Por añadidura, puedes chequear a la vez varios tipos, con lo que te
quedaría así:

def EsFuncion(f):
    return isinstance(f, (types.FunctionType,types.MethodType))


Por completar, para buscar funciones o métodos, en lugar de buscar el
atributo __call__ como se proponía en otros mensajes, lo adecuado
sería buscar por el atributo __get__ característico de los
descriptores (aunque recomiendo la anterior función):

def EsDescriptor(f):
  return hasattr(f,"__get__")




Más información sobre la lista de distribución Python-es