El uso de @staticmethod
o no depende de lo que desee lograr. Ignorar al decorador porque hay más que escribir es una razón bastante tonta (¡sin ofender!) E indica que no has entendido el concepto de un método estático en Python.
Los métodos estáticos son independientes de la clase y de cualquier instancia de clase. Solo usan el alcance de la clase como espacio de nombres. Si omite el decorador @staticmethod
, está creando un método de instancia que no se puede usar sin construir una instancia.
Aquí es una clase muy simple Foo
:
>>> class Foo(object):
... @staticmethod
... def foo():
... print 'foo'
...
... def bar(self):
... print 'bar'
Ahora, Foo.foo()
es un método estático que se puede llamar directamente:
>>> Foo.foo()
foo
Foo.bar()
por el contrario es un método ejemplo , que solo se puede invocar desde instancias (objetos) de Foo
:
>>> Foo.bar()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unbound method foo() must be called with Foo instance as first argument (got nothing instead)
>>> foo = Foo()
>>> foo.bar()
bar
Para responder a su pregunta: Si desea definir un método estático, use @staticmethod
. De lo contrario, no.
Si usted tiene un método que no utiliza self
, y por lo tanto podría escribirse como un método estático, se pregunta: ¿Alguna vez desee acceder a esta función desde fuera sin tener una instancia? La mayoría de las veces, la respuesta será: No.
En realidad, todavía estoy confundido: ¿Hay algunos lugares en los que tengamos que usar métodos estáticos en python3? Encuentro que en muchos lugares no es necesario usar métodos estáticos. –