• Domingo 22 de Diciembre de 2024, 17:02

Autor Tema:  importar una clase  (Leído 13164 veces)

DRiMeR

  • Nuevo Miembro
  • *
  • Mensajes: 22
    • Ver Perfil
    • http://www.informatizados.es
importar una clase
« en: Miércoles 22 de Abril de 2009, 17:20 »
0
Buenas. Estoy intentando familiarizarme lo más rápido posible con Python para hacer unas prácitcas de criptografía.

La verdad es que me está costando menos de lo que esperaba (será que tampoco estoy buscando cosas muy rebuscadas por ahora), pero aún así me he quedado atascado con el tema de las clases.

Me he creado una clase muy simple que se llama Coche, con sus atributos "velocidad", "nombre" y "temperatura" (por poner algo) y algunos métodos como "acelera" y "frena" para ver que todo encaja.

Mientras lo tenía todo en el mismo script, todo lo que he ido probando me ha funcionado bien. Sin embargo, ha sido intentar separarlo en dos archivos, y ya no consigo que funcione de ninguna forma. Y lo único que he encontrado han sido cosas sobre las librería de python, la diferencia entre el FROM - IMPORT, el IMPORT,  y el X=__import__(), y algunas cosas un tanto raras que no he entendido.

Espero que me sepais indicar cómo se hace esto. Si no me equivoco, sería una especie de import "coche.py" en el programa principal, que le he llamado main.py, pero no sé exactamente con qué sintaxis, o de qué forma se consigue esto.


Gracias de antemano. Un saludo.

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: importar una clase
« Respuesta #1 en: Miércoles 22 de Abril de 2009, 17:38 »
0
Al comienzo del segundo módulo solo debes importar el programa
Código: Python
  1. #Modulo de la clase coche
  2. import coche
  3.  
  4. mercedez = coche.Coche(parametros) #O como se llame la clase
  5. mercedez.acelera()
  6. mercedez.frena
  7.  
De esa forma te mola, no debes importar con comillas ni nada ni tampoco colocando la extensión.py, además debe estar el módulo en el mismo path donde tú main.py o sino el PYTHONPATH de la máquina.

Ojala te sirva.
Chao
El pasado son solo recuerdos, el futuro son solo sueños

DRiMeR

  • Nuevo Miembro
  • *
  • Mensajes: 22
    • Ver Perfil
    • http://www.informatizados.es
Re: importar una clase
« Respuesta #2 en: Miércoles 22 de Abril de 2009, 17:54 »
0
Lo acabo de probar como has dicho, pero sigue sin funcionarme. También he pensado en probar en vez de import coche, ponerle un from coche import *. No pensaba que fuera a funcionar, pero por si las moscas.

Lo que no me gustaría es tener que tocar el PATH de la máquina, porque el programa lo voy a tener que estar llevano siempre encima en el pendrive, y si voy a tener que hacerlo así, cada vez que vaya a usar un ordenador de la universidad voy a tener que hacerlo (y puede que no tenga los permisos necesarios, no estoy seguro).

No se si será muy importante o no, pero se me había olvidado dar un par de detalles para aclararlo más. El archivo donde he escrito mi clase se llama coche, con minúscula, y la clase es Coche, con la mayúscula. También, en el archivo coche, he escrito la línea !/usr/bin/env python. Lo he probado con la línea y sin la línea, y siempre me da el mismo error:

ImportError: No module named coche

Quizá por ahí esté el fallo, no??

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: importar una clase
« Respuesta #3 en: Miércoles 22 de Abril de 2009, 18:02 »
0
Mira este código, debe funcionar bien
Código: Python
  1. #Modulo coche.py
  2. #!/usr/bin/env python
  3.  
  4. class Coche:
  5.     def __init__(self, velocidad, nombre, temperatura):
  6.         self.velocidad = velocidad
  7.         self.nombre = nombre
  8.         self.temperatura = temperatura 
  9.  
  10.     def acelerar(self):
  11.         self.velocidad += 1
  12.         print 'La velocidad actual es de ', self.velocidad
  13.  
  14.     def frenar(self):
  15.         if self.velocidad == 0:
  16.             print 'El carro se ha detenido'
  17.         else:
  18.             self.velocidad -= 1
  19.             print 'La velocidad actual es de ', self.velocidad
  20.  
  21. #Modulo main.py
  22. #!/usr/bin/env python
  23.  
  24. import coche
  25.  
  26. mercedez = coche.Coche(0, 'Mercedez Benz', 15)
  27. mercedez.acelerar()
  28. mercedez.acelerar()
  29. mercedez.acelerar()
  30. mercedez.frenar()
  31.  

Así me funciona, por fa' prueba.
El pasado son solo recuerdos, el futuro son solo sueños

DRiMeR

  • Nuevo Miembro
  • *
  • Mensajes: 22
    • Ver Perfil
    • http://www.informatizados.es
Re: importar una clase
« Respuesta #4 en: Miércoles 22 de Abril de 2009, 18:45 »
0
Qué bien!! Me funciona!! Muchísimas gracias Edo.

Mi fallo era que no sabía bien como poner la exntensión, el import, etc.. Entonces mi módulo se llamaba sólo coche, y el import me fallaba. Ahora sí, le he puesto su extensión correspondiente, y en el main, lo he puesto como import coche.

Madre mía, era una tontería, pero como nunca lo he hecho, así me iba xDD

Ya de paso, he logrado comprender realmente la diferencia entre el from - import, y el import, porque he visto que en tu código, el constructor lo usas así:

Código: Text
  1. mercedez = coche.Coche(0, 'Mercedez Benz', 15)
  2.  

Efectivamente, así me funciona, pero haciendólo de esta otra forma, también me funciona:

Código: Text
  1. #main.py
  2. ......
  3. from coche import *
  4. ......
  5. c = Coche('bmw', 0, 50)
  6.  

Ahí es donde realmente he entendido lo que había leido antes.


Un saludo y muchas gracias por la ayuda.

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: importar una clase
« Respuesta #5 en: Miércoles 22 de Abril de 2009, 18:49 »
0
No te recomiendo esa forma, por que al final no sabras de que módulo python estás importando las clases.

PD. No es un constructor, es un instanciador de atributos.
El pasado son solo recuerdos, el futuro son solo sueños

DRiMeR

  • Nuevo Miembro
  • *
  • Mensajes: 22
    • Ver Perfil
    • http://www.informatizados.es
Re: importar una clase
« Respuesta #6 en: Miércoles 22 de Abril de 2009, 19:22 »
0
De acuerdo, gracias por el consejo. Lo haré de esa otra forma entonces.

Respecto al instanciador... estoy acostumbrado a utilizar el nombre "constructor" xDD Procuraré quedarme con los nombres para llamar a cada cosa como se llama.


SAlu2.

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: importar una clase
« Respuesta #7 en: Miércoles 22 de Abril de 2009, 19:29 »
0
Checa el verdadero constructor en Python.
El pasado son solo recuerdos, el futuro son solo sueños