Preguntas sencillas

Gonzalez Suarez, Daniel dgonzalez en sevillana.grupoendesa.com
Lun Mar 3 08:44:04 CET 2003


Buenas,

Sigo con las preguntas sencillas. A raíz de la respuesta de José L. se me
plantea una nueva pregunta sencillita, ¿qué hay que hacer para añadir un
método a una clase en tiempo de ejecución? 

Debo decir que tanta flexibilidad de Python no me gusta un pelo. Prefiero
que en tiempo de compilación se detecten errores del tipo "Método o atributo
no existe".

Otra cosa que no ha me gustado es el mecanismo cutre para definir atributos
y métodos privados (anteponiéndole __ al nombre del atributo/método). Y
mucho menos el truco para poder acceder a atributos/métodos privados
(_nombreClase__nombreAtributo).

Espero vuestra opinión.

Un saludo a todos.


-----Mensaje original-----
De: PpluX [mailto:johiva en inf.upv.es]
Enviado el: jueves, 27 de febrero de 2003 22:43
Para: La lista de python en castellano
Asunto: Re: [Python-es] Preguntas sencillas


> 3) ¿Existe en Python algo parecido a clases abstractas de Java? ¿Y a las
> interfaces?

Hola, yo solo voy a añadir un par de cosillas por si te puede ayudar.
La resolución de las llamadas a métodos en python es totalmente virtual,
es decir solo se determina en tiempo de ejecución su una determinada
instancia tiene o no un método definido.  Bueno ¿y entonces qué? pues
esto te permite conseguir resultados parecidos a lo que harías en java
cuando usas una clase abstracta o una interfaz, puedes suponer que una
clase implementa un método sin problemas de que el "intérprete" no se va a
quejar... ej:

   cuando tu llamas a "c.metodo()" pueden pasar: 
    - inicialmente parece que python buscará la clase de la que es
      instancia c y consultará si existe el método "metodo". Si no
      existe podríamos esperar que diese un error... pero
    - NO, python no se va a preocupar "ahora" si c tiene o no el método
      "metodo", lo comprobará realmente en tiempo de ejecución, es decir
      cuando se tenga que ejecutar esa instrucción (por eso se llama
      virtual).*
      
Esto te permite como comentaba antes que puedas suponer que ciertas
clases definen, o redefinen los métodos que quieras. Es cuestión de ser
ordenado. El problema es que por un lado te da flexibilidad y por el
otro un programa que "compila" no necesariamente va a funcionar como
esperas. =)

Bueno, creo que la cosa me ha quedado muy larga... y tal vez no sea nada
nuevo, pero ahi esta. 


Un saludo.

(*) una razón para esto es que en cualquier momento a la
    instancia c le puedes añadir nuevos metodos o atributos... (y por
    eso la resolución es solamente durante la ejecución). De igual forma
    en una clase puedes decir "del c.atributo" y dinámicamente ese
    atributo desaparecerá (una razón más por la que solamente durante la
    ejecución concreta se puede determinar que métodos o atributos
    tienen una instancia)

-- 
*-------*      
>  (@_  <  From : Jose L. Hidalgo Valiño
>  //\  <  Email: johiva en inf.upv.es
>  V_/_ <         joseLuis.Hidalgo en hispalinux.es
*-------*         pplux en polinux.upv.es
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es




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