No estoy de acuerdo con los demás y digo que sí. Para mí, he tenido más éxito colocando cada clase en su propio archivo (módulo). Pero hay excepciones, así que permítanme explicarlo con un ejemplo.
Si usted tiene una clase Foo, luego ponerlo en un archivo llamado Foo.py, con las siguientes secciones:
- importaciones
- Aquí es donde usted tira en las dependencias.
- Ejemplos:
import math
, from Bar import *
- Globals
- Esto es donde se define la interfaz externa a su módulo, que son todos los símbolos que son visibles fuera de este módulo.
- Ejemplo:
__all__ = ['Foo']
- Aquí es también donde puede definir variables globales (malas) y constantes globales (buenas). Estos globales no necesitan ser exportados; pueden hacerse globales simplemente para simplificar el código.
- Ejemplo:
PI = 3.14159
significa que puede escribir PI
, mientras que si lo definió dentro de la clase Foo, entonces necesitaría escribir Foo.PI
.
- Funciones
- Esto es donde se define todas las funciones de nivel superior que son relevantes para la clase Foo, pero no forman parte de la clase Foo espacio de nombres. Estos son probablemente raros ya que las clases permiten tanto
@staticmethods
como clases internas.
- Ejemplo:
def print_foo(foo): print(foo)
- Clases
- Ejemplo:
class Foo(object): pass
veces que se desee colocar más de una clase en el mismo módulo. Debería hacer esto siempre que dos o más clases estén conceptualmente relacionadas con el punto donde casi siempre las usaría juntas y nunca de forma independiente. Esta es la excepción, no la norma. En este caso, agregue todos los nombres de clase al __all__
global.
Finalmente, para cada módulo Foo.py, debe haber un módulo de prueba de unidad correspondiente llamado testFoo.py.
Viniendo de Java tuve la misma pregunta, chico, estaba confundido por un tiempo. :-) – snarkyname77
Curiosamente, PyDev te ofrece la opción de hacer precisamente eso. – Uri
Si importa una clase desde un archivo con múltiples clases, ¿no podría el intérprete ejecutar todas las clases en ese archivo? –