Type function
Oswaldo Hernández
listas en soft-com.es
Vie Dic 29 17:51:30 CET 2006
Chema Cortes escribió:
> 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))
>
Seguiré tu consejo.
>
> 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__")
El utilizar __call__ era unicamente por desconocer el modulo types, no encontraba otra alternativa.
Gracias.
--
*****************************************
Oswaldo Hernández
oswaldo (@) soft-com (.) es
*****************************************
Más información sobre la lista de distribución Python-es