Duplicar posible:
What is the difference between @staticmethod and @classmethod in Python?Métodos estáticos de Python, ¿por qué?
tengo algunas preguntas acerca de staticmethods en clases. Comenzaré dando un ejemplo.
Ejemplo uno:
class Static:
def __init__(self, first, last):
self.first = first
self.last = last
self.age = randint(0, 50)
def printName(self):
return self.first + self.last
@staticmethod
def printInfo():
return "Hello %s, your age is %s" % (self.first + self.last, self.age)
x = Static("Ephexeve", "M").printInfo()
Salidas:
Traceback (most recent call last):
File "/home/ephexeve/Workspace/Tests/classestest.py", line 90, in <module>
x = Static("Ephexeve", "M").printInfo()
File "/home/ephexeve/Workspace/Tests/classestest.py", line 88, in printInfo
return "Hello %s, your age is %s" % (self.first + self.last, self.age)
NameError: global name 'self' is not defined
Ejemplo dos:
class Static:
def __init__(self, first, last):
self.first = first
self.last = last
self.age = randint(0, 50)
def printName(self):
return self.first + self.last
@staticmethod
def printInfo(first, last, age = randint(0, 50)):
print "Hello %s, your age is %s" % (first + last, age)
return
x = Static("Ephexeve", "M")
x.printInfo("Ephexeve", " M") # Looks the same, but the function is different.
Salidas
Hello Ephexeve M, your age is 18
Veo que no puedo llamar a ningún atributo propio en un método estático, realmente no estoy seguro de cuándo y por qué usarlo. En mi opinión, si creas una clase con algunas atribuidas, tal vez quieras usarlas más adelante, y no tener un método estático en el que no se puedan llamar todos los atributos. ¿Alguien me puede explicar esto? Python es mi primer langunge de programación, así que si esto es lo mismo en Java, por ejemplo, no lo sé.
Odio votar para cerrar, pero las respuestas a la pregunta a la que me he vinculado son bastante buenas. Tenga en cuenta que '@ classmethod' es similar a javas' static'. '@ staticmethod' es bastante inútil. –
Gracias Josh, tal vez no he buscado correctamente, gracias por el enlace, comprobaré ahora –