software practices multi guide create best python project-organization

practices - Organizando mi proyecto de Python



python project structure best practices (4)

Estoy comenzando un proyecto de Python y espero tener 20 o más clases en él. Como es una buena práctica, quiero ponerlos en un archivo por separado cada uno. Sin embargo, el directorio del proyecto rápidamente se inunda de archivos (o lo hará cuando lo haga).

Si pongo un archivo para importar en una carpeta, ya no puedo importarlo. ¿Cómo importo un archivo desde otra carpeta y tendré que hacer referencia a la clase que contiene de manera diferente ahora que está en una carpeta?

Gracias por adelantado


"Como es una buena práctica, quiero ponerlos en un archivo por separado".

Esta no es una muy buena práctica. Debe diseñar módulos que contengan clases relacionadas estrechamente.

Como cuestión práctica, ninguna clase realmente se queda completamente sola. Generalmente las clases vienen en grupos o grupos que están relacionados lógicamente.


La respuesta simple es crear un archivo vacío llamado __init__.py en la nueva carpeta que creó. Luego, en su archivo .py de nivel superior, incluya algo como:

import mynewsubfolder.mynewclass


Python no lo fuerza al desagradable estilo de una clase por archivo de Java. De hecho, ni siquiera se considera un buen estilo para poner cada clase en un archivo separado a menos que sean enormes. (Si son enormes, probablemente tenga que hacer la refactorización de todos modos). En su lugar, debe agrupar clases y funciones similares en módulos. Por ejemplo, si está escribiendo una calculadora de GUI, el diseño de su paquete podría verse así:

/amazingcalc /__init__.py # This makes it a Python package and importable. /evaluate.py # Contains the code to actually do calculations. /main.py # Starts the application /ui.py # Contains the code to make a pretty interface


Cree un archivo __init__.py en su carpeta de proyectos, y Python lo tratará como un módulo.

Las clases en su directorio de paquetes pueden importarse usando sintaxis como:

from package import class import package.class

Dentro de __init__.py , puedes crear una matriz __all__ que defina from package import * comportamiento de from package import * :

# name1 and name2 will be available in calling module''s namespace # when using "from package import *" syntax __all__ = [''name1'', ''name2'']

Y aquí hay mucho más información de la que incluso quieres saber sobre los paquetes en Python

En términos generales, una buena forma de aprender cómo organizar un montón de código es elegir un paquete popular de Python y ver cómo lo hicieron. Vería Django y Twisted , para empezar.