Sign up with your email address to be the first to know about new products, VIP offers, blog features & more.

Métodos estáticos en Python

Ayer por la tarde me surgió una duda sobre Python. Como en cualquier lenguaje orientado a objetos y para realizar una llamada a un método de una clase que no hemos instanciado, esta deberá de ser estática. ¿Realmente se puede hacer esto en Python? No directamente. Me puse a buscar sobre el tema y a través de ActiveState descubro como resolver esto, no se trata de un problema del lenguaje si no de poder compatibilizar algo que sí podemos hacer en otros lenguajes como Java, C++ o .NET.

Vamos a verlo sobre un ejemplo, os lo iré comentando entre línas.

# Directamente, tal como os comentaba, no funciona
class Clase:
def estatica(nombre):
print "Imprime ",nombre

# Para comprobarlo, lo vamos a llamar como un método de la clase:
Clase.estatica("ahornero Linux Hispano")
# Fallará con un TypeError, ya que "estatica" se ha convertido en
un objeto independiente del método, no en una función normal

# Lo podemos resolver de una manera relativamente sencilla:
class Llamador:
def __init__(self, cualquierLlamada):
self.__call__ = cualquierLlamada

# Y un práctico ejemplo de su uso:
class Clase2:
def estatica(nombre):
print "Imprime ",nombre
estatica = Llamador(estatica)

# ahora, lo lanzamos como antes:
Clase.estatica("ahornero en Linux Hispano")
# funciona correctamente, como esperábamos

Espero que os sirva de ayuda si os surge la situación. ¿Conocéis alguna otra alternativa?

  • Tomas

    Usar @classmethod o @staticmethod ??

  • Chema Cortés

    Nooo… Usa los decoradores classmethod y staticmethod para estas cosas:

    class Clase:
    @staticmethod
    def estatica(nombre):
    print nombre

    Clase.estatica(“Soy estático”)

  • danigm

    o mejor aún, usa funciones 😛

    Aunque también puedes llamar a la función directamente si le pasas un objeto del mismo tipo como primer parámetro:

    class A:
    def x(self, a):
    print a

    A.x(A(), “hola”)

Leer entrada anterior
PHP Auth, la alternativa a .htaccess

Ya os comenté con anterioridad, a través del último artículo publicado sobre Task Freak! la necesidad de proteger el contenido...

Cerrar