Можно создать дубликат:
What is the difference between @staticmethod and @classmethod in Python?Python Статические методы, почему?
У меня есть несколько вопросов о staticmethods в классах. Я начну с примера.
Пример один:
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()
Выходы:
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
Пример два:
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.
Выходы
Hello Ephexeve M, your age is 18
Я вижу, что я не могу назвать любой self.attribute в staticmethods, я просто не уверен, когда и зачем его использовать. На мой взгляд, если вы создадите класс с несколькими атрибутами, возможно, вы захотите использовать их позже, и не будете иметь staticmethod, где все атрибуты не подлежат вызову. Кто-нибудь может мне это объяснить? Python - это мой первый программный langunge, поэтому, если это то же самое в Java, например, я не знаю.
Ненависть для голосования, чтобы закрыть, но ответы на вопрос, который я связал, являются довольно хорошими. Обратите внимание, что '@ classmethod' похож на javas' static'. '@ staticmethod' практически бесполезен. –
Спасибо, Джош, возможно, я не искал должным образом, спасибо за ссылку, сейчас проверю –