elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Importar módulos en Python
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Importar módulos en Python  (Leído 2,403 veces)
n-utz

Desconectado Desconectado

Mensajes: 165

Babylon es el vampiro!


Ver Perfil
Importar módulos en Python
« en: 16 Septiembre 2017, 02:08 »

Buenas gente, duda sencilla, tal cual dice el título, vengo de java y c# y estoy complicado con Python.

He leído y todos dice que para importar una clase o módulo a otra se debe usar import nombreDeClase, o from nombreDeClase import */nombreDeMetodo.

Bien, he probado ambas alternativas en mi programa sencillo que hice justamente para ver cómo se resolvía este tema y no me reconoce la función a la que quiero llamar. Les paso el código:

Código:
import ClaseDePrueba

if __name__ == '__main__':
    '''Comentario: Aca va a iniciar el programa'''

    print "Iniciando juego"
    print ClaseDePrueba.llamadaAClase()
   
   

Código:
class MyClass(object):
    '''
    Clase de prueba para importarla a Main
    '''


    def __init__(self):
        '''Constructor'''
       
    def static llamadaAClase(self):
        print "Importada correctamente"
       


En línea

engel lex
CoAdmin
***
Desconectado Desconectado

Mensajes: 15.347



Ver Perfil
Re: Importar módulos en Python
« Respuesta #1 en: 16 Septiembre 2017, 02:25 »

el main no es necesario a menos que trabajes con tu script siendo llamado por otro modulo (si siempre llamas a tu script, siempre será main), static tampoco existe en python, eso se hace con un decorator y es harina de otro saco... no heredes (object) a menos que vayas a usar herencia

archivo -> archivo_importable.py

Código
  1. class MyClass():
  2.    '''
  3.    Clase de prueba para importarla a Main
  4.    '''
  5.  
  6.  
  7.    def __init__(self):
  8.        '''Constructor'''
  9.  
  10.    def llamadaAClase(self):
  11.        print "Importada correctamente"
  12.  
  13. def funcion_aparte():
  14. print "aparte"
  15.  


archivo prueba.py
Código
  1. import archivo_importable
  2.  
  3. objeto = archivo_importable.Myclass() #cargamos la clase
  4. objeto.llamadaAClase() #la llamamos
  5.  
  6. archivo_importable.funcion_aparte() #las funciones importadas funcionan como si fueran metodos del archivo importado
  7.  
  8.  

archivo prueba2.py
Código
  1. from archivo_importable import Myclass # solo importamos la clase
  2.  
  3. objeto = Myclass() #cargamos la clase
  4. objeto.llamadaAClase() #la llamamos
  5.  


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
n-utz

Desconectado Desconectado

Mensajes: 165

Babylon es el vampiro!


Ver Perfil
Re: Importar módulos en Python
« Respuesta #2 en: 16 Septiembre 2017, 02:31 »

Fantástico! Pude importarla correctamente, pero no entiendo por qué me dices que no use Main.

Estoy usando LiClipse, cada .py lo hago creando un nuevo Módulo de tipo Clase.

Mi idea con la creación de Main era tener un Bootstrapper para que el programa siempre arranque desde esa clase/función.

¿Sin el Main es posible?

EDIT: Mejor explicado.

Es decir la creé para indicarle al interprete que arranque booteando esa clase, no las otras, ¿lo podría arreglar con un tema de configuración simplemente?
« Última modificación: 16 Septiembre 2017, 02:37 por n-utz » En línea

engel lex
CoAdmin
***
Desconectado Desconectado

Mensajes: 15.347



Ver Perfil
Re: Importar módulos en Python
« Respuesta #3 en: 16 Septiembre 2017, 02:46 »

Citar
pero no entiendo por qué me dices que no use Main.

Código
  1. if __name__ == '__main__':

para python main siempre es el global scope del script llamado... no estás llamando a main solo estás verificando que sea main, eso se usa para asegurarte que el script sea llamado directamente y no que sea llamado como un import de otro script (cosa que dudo que pase accidentalmente)

Citar
cada .py lo hago creando un nuevo Módulo de tipo Clase.

no abuses de las clases... python es un lenguaje orientado a clases y a protocolos, para el los script importados ya son clases (en casi todo aspecto)... recuerda que python no es java o c# no se comporta igual... el codigo en python siempre es codigo dinamico y ejecutable

archivo importable.py

Código
  1. print(__name__) #como se llama
  2.  
  3. a = 1
  4. b = 2
  5. c = 3
  6.  
  7. def hola():
  8. print(a+b)
  9.  
  10. def otro():
  11. c = 5
  12.  

archivo principal.py

Código
  1. print(__name__) #como se llama
  2. import importable as pi #podemos renombrar
  3.  
  4. pi.hola()
  5. print(pi.a)
  6. print(pi.b)
  7. print(pi.c)
  8.  
  9. pi.otro() #debería renombrar a c, pero como no es una clase no lo hace
  10. print(pi.c)
  11. print(c) #error c pertenece a pi, aquí no hay ningun c
  12.  
  13.  





Citar
Mi idea con la creación de Main era tener un Bootstrapper para que el programa siempre arranque desde esa clase/función

siempre lo hará, sin embargo si puedes agregarlo para evitar que sea importado desde otro archivo
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
n-utz

Desconectado Desconectado

Mensajes: 165

Babylon es el vampiro!


Ver Perfil
Re: Importar módulos en Python
« Respuesta #4 en: 16 Septiembre 2017, 02:53 »

Entiendo, bien, entonces realmente es innecesario utilizar LiClipse, ¿cierto? ¿Debería manejarme solo con editores de texto escribiendo y poniendo la extensión .py, eso sería suficiente?.

Mira he leído un PDF para adentrarme en Python y nunca me aclaró eso de las clases, ¿cómo debería manejarme entonces?, ¿qué tipo de Módulos o archivos debería crear en LiClipse para no abusar de las clases? ¿está mal el uso de las clases, qué sucede si abuso de ellas?

Perdón que te llene a preguntas, realmente me descoloca la orientación a objetos sin clases, si quieres descartarme con algún paper que me recomiendes adelante, gracias Engel, siempre predispuesto!

EDIT:

Probé creando un archivo con LiClipse y poniendole la extensión .py y funciona barbaro, pero parece que también lo trata como un módulo clase, ¿hay diferencias? (Dentro cree una clase con métodos)
« Última modificación: 16 Septiembre 2017, 03:02 por n-utz » En línea

engel lex
CoAdmin
***
Desconectado Desconectado

Mensajes: 15.347



Ver Perfil
Re: Importar módulos en Python
« Respuesta #5 en: 16 Septiembre 2017, 03:30 »

un IDE siempre es buena idea...

el abusar de las clases lo que hace es dificultar la lectura y causar al quien escriba codigo de esa importación que escriba de más...

es decir por ejemplo en lugar de pi.funcion, te tocará usar pi.clase.funcion... como el resto en programación se basa en ser prectico a la hora de programar...

recomiendo que te veas este video....

especialmente para principiantes vale la pena... ojo, la visión puede ser un poco sesgada (como al final se lo comentan) pero es bueno tener el conocimiento que hay opciones
https://www.youtube.com/watch?v=o9pEzgHorH0

tambien de las clases es bueno conocer las funciones reservadas (la sobrecarga de operadores y esas) que son las funciones "doble barra" (double underscore) como son

__init__ es el constructor
__repr__ es el que define que se hará cuando se intente mostrar la clase(print o similar)
__add__  sobrecarga el operador de suma

entre muuuuuuchas otras

tambien es bueno aprender las estructuras unicas del lenguaje (o de los lenguajes script) (como los generadores, los decoradores, etc)

En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
n-utz

Desconectado Desconectado

Mensajes: 165

Babylon es el vampiro!


Ver Perfil
Re: Importar módulos en Python
« Respuesta #6 en: 16 Septiembre 2017, 04:49 »

Gracias engel, ya estuve viendo el video, muy bueno!  ;-)
En línea

engel lex
CoAdmin
***
Desconectado Desconectado

Mensajes: 15.347



Ver Perfil
Re: Importar módulos en Python
« Respuesta #7 en: 16 Septiembre 2017, 05:00 »

ahh y olvidaba... si quieres entender python a profundidad, este articulo dice mucho... es el corazón de python basicamente

https://docs.python.org/3/reference/datamodel.html
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Importar módulos en Python
Scripting
Hagoromo 1 3,026 Último mensaje 16 Enero 2008, 02:06
por Ragnarok
[Python]Problema al importar Urllib2
Scripting
O-LLOS-O 4 3,236 Último mensaje 3 Junio 2010, 15:18
por O-LLOS-O
[Python] Importar Funciones de C++ a Modulo de Python
Scripting
Di6it4Lj4ck4L 2 2,632 Último mensaje 2 Mayo 2011, 19:08
por Di6it4Lj4ck4L
Error al importar modulos standard con cx_freeze [PYTHON]
Scripting
Yidu 3 1,400 Último mensaje 15 Enero 2017, 19:45
por PUAROT
importar el valor de una variable en python sin tener que definirla
Scripting
mario290386 4 1,275 Último mensaje 9 Agosto 2018, 20:47
por mario290386
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines