modulos - python crear paquetes
Organizar clases de Python en módulos y/o paquetes (2)
La solución de Zach se rompe en Python 3. Aquí hay una solución fija.
Mucho de esto es preferencia personal. Al usar los módulos de Python, tienes la opción de mantener cada clase en un archivo separado y aún permitir import converters.SomeConverter
from converters import SomeConverter
(o from converters import SomeConverter
)
La estructura de tu archivo podría verse más o menos así:
* converters
- __init__.py
- baseconverter.py
- someconverter.py
- otherconverter.py
y luego en su archivo __init__.py
:
from converters.baseconverter import BaseConverter
from converters.otherconverter import OtherConverter
Me gusta la convención de Java de tener una clase pública por archivo, incluso si a veces hay buenas razones para incluir más de una clase pública en un solo archivo. En mi caso, tengo implementaciones alternativas de la misma interfaz. Pero si los ubicara en archivos separados, tendría nombres redundantes en las declaraciones de importación (o nombres de módulos engañosos):
import someConverter.SomeConverter
mientras que someConverter
sería el nombre del archivo (y del módulo) y SomeConverter
el nombre de la clase. Esto se ve bastante poco elegante para mí. Poner todas las clases alternativas en un archivo daría lugar a una declaración de importación más significativa:
import converters.SomeConverter
Pero me temo que los archivos se vuelvan bastante grandes si coloco todas las clases relacionadas en un solo archivo de módulo. ¿Cuál es la mejor práctica de Python aquí? Es una clase por archivo inusual?
Mucho de esto es preferencia personal. Al usar los módulos de Python, tienes la opción de mantener cada clase en un archivo separado y aún permitir import converters.SomeConverter
from converters import SomeConverter
(o from converters import SomeConverter
)
La estructura de tu archivo podría verse más o menos así:
* converters
- __init__.py
- baseconverter.py
- someconverter.py
- otherconverter.py
y luego en su archivo __init__.py
:
from baseconverter import BaseConverter
from otherconverter import OtherConverter