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