Python es un lenguaje orientado a objetos, y como tal permite construir clases para definir objetos que tendrán un cierto estado interno y un conjunto de operaciones sobre el mismo. Sin embargo, Python también permite crear módulos, o conjuntos de funciones y definiciones de datos, no organizados utilizando el paradigma orientado a objetos. Incluso es posible implementar una mezcla de ambos esquemas.



El problema con la programación orientada a objetos, es que puede agregar una complejidad innecesaria en el desarrollo de ciertas aplicaciones, y a veces la definición de objetos a partir del modelo de datos de la aplicación resulta bastante forzada.

Un módulo es como una librería, un archivo que contiene código en lenguaje Python donde se definen variables y funciones, el cual podremos incluir en otro programa o script Python y así acceder a las mismas utilizando el operador punto (.).

Por ejemplo, veamos la definición del módulo mimodulo.py:

hola = "¡Hola mundo!"

def imprimir():
  print hola

Al incluir este módulo desde otro programa, es posible acceder tanto a sus funciones como a sus variables. Es decir:

import mimodulo

mimodulo.imprimir()
print mimodulo.hola

La ejecución anterior mostrará dos veces el mensaje ¡Hola mundo!.

Sin entrar en detalles sobre la programación orientada a objetos, es posible ver a una clase como un módulo (miclase.py):

class miclase(object):

  def __init__(self):
    self.hola = "¡Hola mundo!"

  def imprimir(self):
    print self.hola

La diferencia al utilizar módulos o clases radica en que un módulo es instanciado una única vez (al importarlo), por lo cual tendremos en todo momento un único valor para la variable hola, mientras que una clase puede ser instanciada múltiples veces, donde cada instancia tendrá su propia copia de la variable hola (de allí el uso de self para definir variables propias de cada instancia). Lógicamente la clase se importa una única vez, pero es posible tener múltiples "instancias" (objetos) de la misma, y cada una no interfiere con las demás.

Esta instanciación (crear un nuevo objeto o instancia de la clase importada) se produce al llamar a la clase como si fuese una función (lo que implica que se ejecute la función __init__ de la misma):

import miclase

juan = miclase()
juan.imprimir()
juan.hola = "Chau"
juan.imprimir()

pedro = miclase()
pedro.imprimir()

Esta ejecución mostrará las siguientes líneas:

¡Hola mundo!
Chau
¡Hola mundo!

(Claro que acceder directamente a una variable interna de un objeto, en lugar de utilizar un método getter/setter, está condenado a la pena de muerte por los puristas de la programación orientada objetos).

Referencias

Learn Python the Hard Way - Exercise 40: Modules, Classes, and Objects


Tal vez pueda interesarte


Compartí este artículo