Métodos estáticos en Python

Al haberme metido de lleno en el desarrollo de Frontier, no he podido evitar poner en práctica mis hábitos de desarrollador estructurado, por lo que ahora mismo me encuentro en la fase de reestructuración y modularización del código, antes de que este sea demasiado largo como para mantenerlo adecuadamente. Al estar acostumbrado a realizar desarrollos orientado a objetos, me encuentro más a gusto organizando las cosas en clases que con funciones, y ya que me pongo, pues suelo preferir utilizar singletons siempre que puedo antes que clases con métodos estáticos. Aún así, para construir un singleton sigue siendo necesario utilizar este tipo de métodos y miembros, por lo que vamos a ver como conseguirlo en Python.

Ejemplo de clase Singleton en Python:

class CSingleton(object):

instance = 0

def __init__(self):

# set variables to whatever
pass

@staticmethod
def getInstance():

if CSingleton.instance==0:

CSingleton.instance=CSingleton()

return CSingleton.instance

# Creamos una instancia

objeto = CSingleton.getInstance()

Al utilizar @staticmethod conseguimos que al llamar a la función getInstance, no exija el paso como primer argumento de la instancia de un objeto de esa clase, que es lo habitual.

About these ads

One thought on “Métodos estáticos en Python

  1. ok, sin embargo mientras pueda acceder directamente al constructor de la clase, no me puedo fiar mucho, por ejemplo si hago:

    obj1 = CSingleton.getInstance()
    obj2 = CSingleton()

    obtendremos dos instancias diferentes. Lo ideal seria privatizar el constructor, aunque eso en Python no creo que se pueda… sin embargo tu solucion me gusta porque es mas sencilla de lo que he visto por ahi, sirve como paliativo a falta de algo mas estricto (y sabemos que Python no es muy estricto XD)

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s