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