Python staticmethod Tutorial: Syntax und Anwendung
Statische Methoden kannst du direkt über den Klassennamen aufrufen, ohne eine Instanz der Klasse erstellen zu müssen. Python staticmethod unterstützt dich dabei, die Klassenlogik sauber von den Instanzdaten zu trennen.
Wozu dient Python staticmethod?
Python staticmethod fungiert als Funktion und Dekorator, um Methoden zu markieren, die unabhängig von Klasseninstanzen agieren. Dekoratoren in Python sind Werkzeuge, die das Verhalten anderer Methoden anpassen, indem sie zusätzliche Funktionalität vor oder nach deren Ausführung ergänzen, ohne den eigentlichen Code zu verändern. Im Gegensatz zu Instanzmethoden benötigen statische Funktionen keinen impliziten Parameter wie self für Instanzen.
Der Einsatz von staticmethod in Python erlaubt es dir, Funktionen innerhalb von Klassen zu strukturieren, die keine Instanzdaten benötigen. Da keine Bindung an eine Instanz besteht, können sie den Zustand eines Objekts nicht ändern. Sie sind praktisch, um innerhalb einer Klasse allgemeine Aufgaben zu erledigen oder globale Funktionen bereitzustellen. Das können zum Beispiel Dienstprogramme, Konvertierungen oder Hilfsfunktionen sein, die ohne Instanzdaten glatt laufen.
So sieht die Syntax von Python staticmethod aus
In Python hast du zwei Wege, um statische Methoden zu definieren. Nutze dafür entweder die staticmethod()-Funktion oder den Dekorator @staticmethod.
staticmethod()
staticmethod() ist eine integrierte Python-Funktion, die eine Methode einer Klasse statisch macht. Der Rückgabewert von Python staticmethod() ist eine statische Methode der als Argument übergebenen Funktion. Die Syntax sieht so aus:
class Class:
def staticmethodFunc(x,y):
return x + y
Class.staticmethodFunc = staticmethod(Class.staticmethodFunc)
print('Sum = ', Class.staticmethodFunc(5,7)) # Output: Sum = 12pythonIndem die in der Klasse Class definierte Funktion staticmethodFunc() als Argument an staticmethod() geht, lässt sich die eigene Methode direkt über den Klassennamen ansprechen.
@staticmethod
Der @staticmethod-Dekorator ist der schnellere und gängigere Weg, eine Funktion statisch zu markieren. Du platzierst den Dekorator einfach über der Methode innerhalb der Klassendefinition. Die Syntax lautet:
class Class:
@staticmethod
def staticmethodFunc(x, y):
return x + y
print('Sum = ', Class.staticmethodFunc(5,7)) # Output: Sum = 12pythonDer Dekorator @staticmethod zeigt dem Interpreter, dass die Funktion als statische Methode behandelt werden soll.
Codebeispiele für den Einsatz von Python staticmethod
Statische Methoden sind für viele Aufgaben nützlich. Hier findest du ein paar praxisnahe Beispiele.
Konvertieren von Einheiten
Python staticmethod eignet sich hervorragend für die Umrechnung von Einheiten.
class Converter:
@staticmethod
def hoursToMinutes(hours):
return hours * 60
@staticmethod
def minutesToHours(minutes):
return minutes / 60
hours = 3
converted_minutes = Converter.hoursToMinutes(hours)
print(f"{hours} hours are {converted_minutes} minutes.") # Output: 3 hours are 180 minutes.
minutes = 180
converted_hours = Converter.minutesToHours(minutes)
print(f"{minutes} minutes are {converted_hours} hours.") # Output: 180 minutes are 3 hours.pythonIn diesem Fall nutzt die Klasse Converter zwei statische Methoden für Zeitumrechnungen. Die Methode hoursToMinutes() macht aus Stunden Minuten, während minutesToHours() den umgekehrten Weg geht.
Die statischen Methoden werden über den Klassennamen aufgerufen, ganz ohne Instanz. Der Zugriff erfolgt via Converter.hoursToMinutes() oder Converter.minutesToHours(), wobei Converter der Name der Klasse ist. Die Ausgabe erfolgt als f-String – eine effiziente Python-String-Format-Methode zur Verknüpfung von Ausdrücken.
Hilfsfunktionen für mathematische Berechnungen
Mit Python staticmethod lassen sich auch prima Hilfsfunktionen für Kalkulationen erstellen.
class Calculator:
@staticmethod
def square(x):
return x * x
@staticmethod
def sqroot(x):
return x ** 0.5
num = 9
square = Calculator.square(num)
print(f"The square of {num} is {square}.") # Output: The square of 9 is 81.
root = Calculator.sqroot(num)
print(f"The square root of {num} is {root}.") # Output: The square root of 9 is 3.pythonDieses Beispiel zeigt die Klasse Calculator mit statischen Methoden für Quadrate und Wurzeln. Mit dem @staticmethod-Dekorator werden square() und sqroot() als statisch definiert. Ohne Umweg über eine Instanz werden die Methoden über die Klasse aufgerufen. Die Ergebnisse von Calculator.square() und Calculator.sqroot() werden im f-String zusammengeführt.
Validierung von Eingaben
Auch für die Überprüfung von Daten ist Python staticmethod ideal.
class Validator:
@staticmethod
def isInteger(num):
try:
int(num)
return True
except ValueError:
return False
@staticmethod
def isDecimal(num):
try:
float(num)
return True
except ValueError:
return False
input = "123"
is_integer = Validator.isInteger(input)
print(f"Is '{input}' an integer? {is_integer}") # Output: Is '123' an integer? True
input = "3.14"
is_dec = Validator.isDecimal(input)
print(f"Is '{input}' a decimal number? {is_dec}") # Output: Is '3.14' a decimal number? TruepythonDie Klasse Validator nutzt die statischen Methoden isInteger() und isDecimal(). Diese prüfen, ob ein Wert eine Ganzzahl oder ein Dezimalwert ist. Die Methode isInteger() versucht eine Umwandlung in (int(num)). Klappt das, kommt True zurück. Schlägt es fehl, wird die Ausnahme ValueError abgefangen und False ausgegeben.
Analog dazu wandelt isDecimal() die Eingabe in eine Dezimalzahl (float(num)) um. Erfolg liefert True, Misserfolg False. Danach validieren wir mit den Methoden von Validator die Testwerte "123" und "3.14". In beiden Fällen ist das Ergebnis wahr.
Manipulation von Strings
class StringManipulation:
@staticmethod
def reverseText(text):
return text[::-1]
input_text = "Hello World!"
result = StringManipulation.reverseText(input_text)
print(f"Reversed text of '{input_text}': {result}") # Output: Reversed text of 'Hello World!': !dlroW olleHpythonHier definieren wir die Klasse StringManipulation mit der statischen Methode reverseText(). Sie nimmt einen Text entgegen, nutzt die Slicing-Syntax [::-1], um den "Hello World!" umzudrehen, und gibt das Resultat aus.