Tengo un directorio que almacena todos los archivos .py .
bin/ main.py user.py # where class User resides dir.py # where class Dir resides
Quiero usar clases de user.py y dir.py en main.py.
¿Cómo puedo importar estas clases de Python en main.py ?
Además, ¿cómo puedo importar la clase User
si user.py está en un subdirectorio?
bin/ dir.py main.py usr/ user.py
Haga un archivo vacío llamado __init__.py
en el mismo directorio que los archivos. Eso significará para Python que está “bien para importar desde este directorio”.
Entonces solo haz …
from user import User from dir import Dir
Lo mismo ocurre si los archivos están en un subdirectorio: coloque un __init__.py
en el subdirectorio también, y luego use declaraciones de importación regulares, con notación de puntos. Para cada nivel de directorio, debe agregar a la ruta de importación.
bin/ main.py classes/ user.py dir.py
Entonces, si el directorio se llamara “clases”, entonces harías esto:
from classes.user import User from classes.dir import Dir
Igual que el anterior, pero prefija el nombre del módulo con un .
Si no está utilizando un subdirectorio:
from .user import User from .dir import Dir
Acabo de enterarme (gracias al comentario de martineau ) que, para importar clases desde archivos dentro del mismo directorio, ahora escribiría en Python 3:
from .user import User from .dir import Dir
En tu main.py
:
from user import Class
donde Class
es el nombre de la clase que desea importar.
Si desea llamar a un método de Class
, puede llamarlo usando:
Class.method
Tenga en cuenta que debe haber un archivo __init__.py
vacío en el mismo directorio.
Puede importar el módulo y tener acceso a través de su nombre si no desea mezclar funciones y clases con las suyas.
import util # imports util.py util.clean() util.setup(4)
o puedes importar las funciones y clases a tu código
from util import clean, setup clean() setup(4)
puedes usar wildchar * para importar todo el contenido de ese módulo a tu código
from util import * clean() setup(4)
Para hacerlo más sencillo de entender:
Paso 1: vamos a un directorio, donde se incluirán todos
$ cd /var/tmp
Paso 2: ahora hagamos un archivo class1.py que tenga un nombre de clase Class1 con algún código
$ cat > class1.py <<\EOF class Class1: OKBLUE = '\033[94m' ENDC = '\033[0m' OK = OKBLUE + "[Class1 OK]: " + ENDC EOF
Paso 3: ahora hagamos un archivo class2.py que tenga un nombre de clase Class2 con algún código
$ cat > class2.py <<\EOF class Class2: OKBLUE = '\033[94m' ENDC = '\033[0m' OK = OKBLUE + "[Class2 OK]: " + ENDC EOF
Paso 4: ahora hagamos un main.py que se ejecutará una vez para usar Class1 y Class2 de 2 archivos diferentes
$ cat > main.py <<\EOF """this is how we are actually calling class1.py and from that file loading Class1""" from class1 import Class1 """this is how we are actually calling class2.py and from that file loading Class2""" from class2 import Class2 print Class1.OK print Class2.OK EOF
Paso 5: Ejecutar el progtwig
$ python main.py
La salida sería
[Class1 OK]: [Class2 OK]:
from user import User from dir import Dir
Python 3
Mismo directory
archivo de importación: log.py
clase de importación: SampleApp()
.
import log if __name__ == "__main__": app = log.SampleApp() app.mainloop()
o
El directorio es basic
.
importar en el archivo: log.py
clase de importación: SampleApp()
.
from basic import log if __name__ == "__main__": app = log.SampleApp() app.mainloop()
Simplemente demasiado breve, Cree un archivo __init__.py
es el directorio de clases y luego impórtelo a su secuencia de comandos como sigue
from classes.myscript import *