Comprobar la clase del parametro de una funcion

Ricardo Catalinas Jimenez th1nk3r en server01.org
Lun Mayo 23 17:54:45 CEST 2005


0n Mon, May 23, 2005 at 05:32:24PM +0200, Pepe Aracil wrote:
> Con la función type()
> 
> >>> a=25
> >>> type(a)
> <type 'int'>
> >>> type(a)==int
> True
> >>> isinstance(a,int)
> True

Cuando me referia a hacer la comprobacion desde el principio de la
llamada de la funcion me referia a hacerlo de un modo mas implicito, ya
que con este metodo tendria que comprobar parametro a parametro sus
tipos para ver si tienen el adecuado. Ademas de que la robustez del
programa deberia estar implementada en las propias funciones y no que
uno tenga que esta siempre pendiente de estos pormenores.

Por ejemplo, con la siguiente funcion diseñada para trabajar solo con
valores del tipo `int':
--- codigo ---
def f(a, b, c):
	if type(a) == int and type(b) == int and type(c) == int:
		# la funcion se ejecutara con normalidad
		...
		...
	else:
		# generar alguntipo de exception o lo que sea para
		# indicar el error
		...
		...
--- codigo ---

Ademas de que este modo de implementarse es realmente engorroso cuando
se trabaja con varios parametros.


Como informacion adicioanl, decir que este tipo de comprobacion la veo
implementada en las propias bibliotecas de funcoines de Python. Como por
ejemplo la rutina `append' del modulo `string':

--- code ---
import string

# declaramos un `int'
x = 1
x.append("nuevo_elemento")

# aqui se nos produce un error como este:
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
AttributeError: 'int' object has no attribute 'append'
--- code ---

Como vemos aqui la routine comprueba la clase a la que pertenece `x'.
	

Por tanto, intentando dejar mas clara mi duda, alguien sabe como hacer
esta comprobacion a la que me refiero?

Un saludo y gracias.
-- 
Ricardo Catalinas Jimenez    Madrid, Spain.
th1nk3r(at)server01(dot)org  http://www.server01.org
GnuPG Key fingerprint = 662C EBF7 9220 0F14 C644  F90B DC3E A163 7F8D CDAE




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