Hoe Python staticmethod() te gebruiken
Statische methoden kunnen rechtstreeks via de klassenaam worden aangeroepen zonder dat de klasse hoeft te worden geïnstantieerd. Deze eigenschap van Python staticmethod maakt een duidelijke scheiding mogelijk tussen klasselogica en instantiegegevens.
Waarvoor wordt Python staticmethod gebruikt?
Python staticmethod is zowel een functie als een decorator. Het wordt gebruikt om methoden aan te duiden die onafhankelijk van klasse-instanties werken. Decorators in Python zijn functies die het gedrag van andere methoden wijzigen door aanvullende functionaliteit toe te voegen vóór of na hun uitvoering, zonder de oorspronkelijke functiecode te wijzigen. In tegenstelling tot instantiemethoden hebben statische functies geen impliciete parameter zoals self nodig.
Het gebruik van staticmethod in Python biedt een gerichte benadering voor het structureren van functies binnen klassen die geen toegang tot instantiegegevens vereisen. Omdat ze niet aan een instantie gebonden zijn, kunnen ze de status van een object niet wijzigen. Binnen klassen dienen ze als waardevolle hulpmiddelen voor het uitvoeren van veelvoorkomende taken of het bieden van globale functionaliteit. Ze kunnen bijvoorbeeld hulpprogramma’s, conversieroutines en algemene hulpfuncties bevatten die zonder instantiegegevens kunnen worden aangeroepen.
Wat is de syntaxis van Python staticmethod?
Er zijn twee manieren om statische methoden in Python te maken. Je kunt de functie staticmethod() of de decorator @staticmethod gebruiken.
staticmethod()
staticmethod() is een ingebouwde Python-functie die een methode van een klasse statisch maakt. De retourwaarde van Python staticmethod() is een statische methode voor de functie die als argument wordt doorgegeven. De syntaxis is:
class Class:
def staticmethodFunc(x,y):
return x + y
Class.staticmethodFunc = staticmethod(Class.staticmethodFunc)
print('Sum = ', Class.staticmethodFunc(5,7)) # Output: Sum = 12pythonDoor de staticmethodFunc() functie die in de Class klasse is gedefinieerd als argument door te geven aan staticmethod(), kunnen we nu de aangepaste methode rechtstreeks via de klassenaam aanroepen.
@staticmethod
De @staticmethod decorator is een kortere en meer gangbare methode om een functie als statisch te markeren. De decorator wordt boven de methode in de klassedefinitie geplaatst. De syntaxis is:
class Class:
@staticmethod
def staticmethodFunc(x, y):
return x + y
print('Sum = ', Class.staticmethodFunc(5,7)) # Output: Sum = 12pythonHet @staticmethod -decoratorsignaal geeft aan de interpreter door dat de gedefinieerde functie als een statische methode moet worden behandeld.
Python staticmethod codevoorbeelden
Je kunt statische methoden voor verschillende taken gebruiken. Hieronder staan een paar praktische voorbeelden van hoe je statische methoden kunt gebruiken.
Eenheden omrekenen
Python staticmethod is erg handig voor het omrekenen van eenheden.
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 dit voorbeeld heeft klasse Converter twee statische methoden om tussen uren en minuten te converteren. Methode hoursToMinutes() converteert uren naar minuten, terwijl minutesToHours() minuten naar uren converteert.
We kunnen de statische methoden aanroepen via de klassenaam zonder dat we een instantie van de klasse hoeven aan te maken. Ze zijn toegankelijk via Converter.hoursToMinutes() of Converter.minutesToHours(), waarbij Converter de klassenaam is. We geven het resultaat weer in een f-string, een Python-stringformaat dat uitdrukkingen aan elkaar koppelt.
Hulpfuncties voor wiskundige berekeningen
Je kunt ook Python’s staticmethod() gebruiken om hulpfuncties voor secundaire berekeningen te definiëren.
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.pythonHet codevoorbeeld toont de klasse Calculator met statische methoden voor het berekenen van het kwadraat en de vierkantswortel van een getal. We gebruiken de decorator @staticmethod om square() en sqroot() als statische methoden te markeren. Zonder een instantie van de klasse te maken, roepen we de methoden aan via de klassenaam. We voegen de resultaten van Calculator.square() en Calculator.sqroot() samen in een f-string.
Validatie van inzendingen
Een ander gebruik van Python’s staticmethod is het valideren van invoer.
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? TruepythonDe klasse Validator bestaat uit twee statische methoden: isInteger() en isDecimal(). Deze functies controleren of een bepaalde invoer een geheel getal of een decimaal getal is. De Python statische methode isInteger() neemt een invoer en probeert deze om te zetten in een geheel getal (int(num)). Als dit lukt, wordt True geretourneerd. Anders krijgen we False als er een uitzondering ValueError wordt opgevangen, wat gebeurt wanneer validatie niet mogelijk is.
We gebruiken de isDecimal() methode om de invoer om te zetten in een decimaal getal (float(num)). Als dit lukt, wordt True geretourneerd, anders False. Vervolgens gebruiken we de isInteger() en isDecimal() statische methoden van de Validator klasse om de invoer "123" en "3.14" te controleren. De resultaten zijn waar voor beide functies.
Manipulatie van strings
In het onderstaande voorbeeld definiëren we de klasse StringManipulation met de statische methode reverseText(). Deze neemt een tekst als parameter en gebruikt de slicing-syntaxis [::-1] om de tekst "Hello World!" om te keren en het resultaat terug te geven.
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 olleHpython