Organizar clases de Python en módulos y / o paquetes.

Me gusta la convención de Java de tener una clase pública por archivo, incluso si a veces hay buenas razones para poner más de una clase pública en un solo archivo. En mi caso tengo implementaciones alternativas de la misma interfaz. Pero si los colocara 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 módulo) y SomeConverter el nombre de la clase. Esto me parece bastante poco elegante. Poner todas las clases alternativas en un archivo llevaría a una statement de importación más significativa:

 import converters.SomeConverter 

Pero me temo que los archivos se vuelvan bastante grandes, si pongo 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 una preferencia personal. Al usar los módulos de Python, tiene la opción de mantener cada clase en un archivo separado y aún así permitir la import converters.SomeConverter from converters import SomeConverter (o from converters import SomeConverter )

Su estructura de archivos podría verse algo como esto:

 * converters - __init__.py - baseconverter.py - someconverter.py - otherconverter.py 

y luego en su archivo __init__.py :

 from baseconverter import BaseConverter from otherconverter import OtherConverter 

La solución de Zach se rompe en Python 3. Aquí hay una solución fija.

Mucho de esto es una preferencia personal. Al usar los módulos de Python, tiene la opción de mantener cada clase en un archivo separado y aún así permitir la import converters.SomeConverter from converters import SomeConverter (o from converters import SomeConverter )

Su estructura de archivos podría verse algo como esto:

 * 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