Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
13<br />
PROGRAMACION<br />
Si el valor de cond se correspondiera con uno falso, entonces su valor sería el resultado del<br />
and y al aplicárserle luego el operador or, la expresión final retornaría val2. Sólo queda un<br />
caso oculto que es muy dañino y suele ser fuente de innumerables errores. Por ejemplo, en<br />
C la expresión 1 0: 2 retornaría 0. Sin embargo, el resultado de evaluar 1 and 0 or 2 en Python<br />
es 2 (... ¿por qué ...). La solución a este caso se discutirá en el próximo número de este<br />
curso ... ¡¡No se lo pierda!! ;).<br />
Posiblemente el aspecto más notorio en la implementación de todos los tipos de datos ya<br />
comentados es que los números enteros, reales, complejos, los valores booleanos, en fin…<br />
todo es un objeto, y esta filos<strong>of</strong>ía es llevada al extremo. Esto distancia a Python de otros<br />
lenguajes como C, Pascal e incluso hasta de Java (que posee tipos básicos); y lo acerca al<br />
primer lenguaje orientado a objetos… Smalltalk.<br />
Para apoyar esta afirmación la Figura 5 muestra el uso de varias funciones que permiten<br />
conocer información sobre cualquier dato disponible. Primeramente la función type permite<br />
determinar el tipo asociado a cualquier valor; mientras que isinstance es la manera más<br />
recomendada (se verá después por qué) para determinar si un valor dado es de un tipo<br />
(e.g. un número entero) o no.<br />
El hecho de que todo sea un objeto posibilita la sobrecarga de operadores aritméticos (qué<br />
será detallada posteriormente). La Figura 5 muestra otras formas de sumar y multiplicar<br />
dos números reales o enteros, utilizando los métodos especiales __add__ y __mul__. Si los<br />
valores adicionados no son compatibles, cada método retorna el objeto NotImplemented,<br />
otro objeto muy especial y único en su especie. Este valor se utiliza para marcar las<br />
funcionalidades y servicios que están previstos en el diseño de un s<strong>of</strong>tware, pero que<br />
todavía no se han implementado, o no se van a implementar ya sea porque no tiene<br />
sentido hacerlo, porque hay tipos de dato incompatibles, o cualquier otra razón.