Mögliche Duplizieren:
What is the difference between @staticmethod and @classmethod in Python?Python Statische Methoden, warum?
Ich habe ein paar Fragen zu staticmethods in Klassen. Ich werde mit einem Beispiel beginnen.
Beispiel ein:
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()
Ausgänge:
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
Beispiel zwei:
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.
Ausgänge
Hello Ephexeve M, your age is 18
Ich sehe, dass ich in statischen Methoden kein Selbstattribut nennen kann, ich bin mir nicht sicher, wann und warum ich es benutzen soll. Meiner Meinung nach, wenn Sie eine Klasse mit einigen Attributen erstellen, möchten Sie sie vielleicht später verwenden und haben keine statische Methode, bei der alle Attribute nicht aufrufbar sind. Kann mir jemand das erklären? Python ist meine erste Programmiersprache, also wenn das zum Beispiel in Java so ist, weiß ich nicht.
Hass zu stimmen, um zu schließen, aber die Antworten in der Frage, die ich verlinkt habe, sind ziemlich gut. Beachten Sie, dass '@ classmethod' ähnlich zu javas' static' ist. '@ staticmethod' ist ziemlich nutzlos. –
Danke Josh, vielleicht habe ich nicht richtig gesucht, danke für den Link, werde jetzt nachsehen –