| You are here: Inicio > Inmersión en Python > Su primer programa en Python > Todo es un objeto | << >> | ||||
Inmersión en PythonPython de novato a experto |
|||||
En caso de que no se haya dado cuenta, acabo de decir que las funciones de Python tienen atributos y que dispone de esos atributos en tiempo de ejecución.
Una función es un objeto, igual que todo lo demás en Python.
Abra su IDE favorito para Python y escriba:
>>> import odbchelper>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"} >>> print odbchelper.buildConnectionString(params)
server=mpilgrim;uid=sa;database=master;pwd=secret >>> print odbchelper.buildConnectionString.__doc__
Crea una cadena de conexión partiendo de un diccionario de parámetros. Devuelve una cadena.
| La primera línea importa el programa odbchelper como módulo (un trozo de código que puede usar interactivamente, o desde un programa de Python mayor. -- Verá ejemplos de programas de Python multimódulo en el Capítulo 4). Una vez importe un módulo podrá referirse a cualquiera de sus funciones, clases o atributos públicos. Esto puede hacerlo un módulo para acceder a funcionalidad existente en otros módulos, y puede hacerlo también usted en el IDE. Esto es un concepto importante y hablaremos de ello más adelante. | |
| Cuando quiera usar funciones definidas en módulos importados, deberá incluir el nombre del módulo. De manera que no puede simplemente decir buildConnectionString; debe ser odbchelper.buildConnectionString. Si ha usado clases en Java, esto debería serle vagamente familiar. | |
| En lugar de llamar a la función tal como cabría esperar, ha solicitado uno de los atributos de la función, __doc__. |
| import en Python es como require en Perl. Una vez que hace import sobre un módulo de Python, puede acceder a sus funciones con módulo.función; una vez que hace require sobre un módulo de Perl, puede acceder a sus funciones con módulo::función. | |
Antes de continuar, quiero mencionar brevemente la ruta de búsqueda de bibliotecas. Python busca en varios sitios cuando intenta importar un módulo. Específicamente, busca en todos los directorios definidos en sys.path. Esto es simplemente una lista, y puede verla o modificarla fácilmente con los métodos estándar de una lista (conocerá las listas más adelante en este capítulo).
>>> import sys>>> sys.path
['', '/usr/local/lib/python2.2', '/usr/local/lib/python2.2/plat-linux2', '/usr/local/lib/python2.2/lib-dynload', '/usr/local/lib/python2.2/site-packages', '/usr/local/lib/python2.2/site-packages/PIL', '/usr/local/lib/python2.2/site-packages/piddle'] >>> sys
<module 'sys' (built-in)> >>> sys.path.append('/mi/nueva/ruta')
| Importar el módulo sys deja disponibles todas sus funciones y atributos. | |
| sys.path es una lista de nombres de directorios que constituye la ruta de búsqueda actual (la suya puede ser diferente, dependiendo del sistema operativo, qué versión de Python esté ejecutando, y dónde la instaló originalmente). Python buscará en estos directorios (y en ese orden) un fichero .py que corresponda al nombre del módulo que intenta importar. | |
| En realidad mentí; la verdad es más complicada que eso, porque no todos los módulos se instalan como ficheros .py. Algunos, como el módulo sys, son «módulos incorporados» ("built-in"); y están dentro del propio Python. Los módulos built-in se comportan exactamente como los normales pero no dispone de su código fuente en Python, ¡porque no se escriben usando Python! (el módulo sys está escrito en C.) | |
| Puede añadir un nuevo directorio a la ruta de búsqueda de Python en tiempo de ejecución agregando el nombre del directorio a sys.path, y entonces Python buscará en ese directorio también cada vez que intente importar un módulo. El efecto dura tanto como esté en ejecución Python. (Hablaremos más sobre append y otros métodos de listas en el Capítulo 3) |
Todo en Python es un objeto, y casi todo tiene atributos y métodos. Todas las funciones tienen un atributo __doc__ que devuelve la cadena de documentación definida en su código fuente. El módulo sys es un objeto que contiene (entre otras cosas) un atributo llamado path. Y así con todo.
Aún así, la pregunta sigue sin contestar. ¿Qué es un objeto? Los diferentes lenguajes de programación definen “objeto” de maneras diferentes. En algunos significa que todos los objetos deben tener atributos y métodos; en otros esto significa que todos los objetos pueden tener subclases. En Python la definición es más amplia: algunos objetos no tienen ni atributos ni métodos (más sobre esto en el Capítulo 3), y no todos los objetos pueden tener subclases (más al respecto en el Capítulo 5). Pero todo es un objeto en el sentido de que se puede asignar a una variable o ser pasado como argumento a una función (más sobre en el Capítulo 4).
Esto es tan importante que voy a repetirlo en caso de que se lo haya perdido las últimas veces: todo en Python es un objeto. Las cadenas son objetos. Las listas son objetos. Las funciones son objetos. Incluso los módulos son objetos.
<< Documentación de funciones |
| 1 | 2 | 3 | 4 | 5 | 6 | |
Sangrado (indentado) de código >> |