python - clases - ¿Cómo importar la clase dentro del mismo directorio o subdirectorio?
clases en python (7)
Python 2
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
Python 3
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
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
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.
Para hacerlo más simple 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 programa
$ python main.py
La salida sería
[Class1 OK]:
[Class2 OK]:
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)
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 *
from user import User
from dir import Dir