¿Cómo importar la clase dentro del mismo directorio o subdirectorio?

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 

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 

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 *