A statikus módszerek közvetlenül az osztálynévvel hívhatók meg, anélkül, hogy az osztályt instantiálni kellene. A Python staticmethod ezen jellemzője megkönnyíti az osztálylogika és az instáns adatok egyértelmű elválasztását.

Mire használják a Python staticmethod?

A Python staticmethod egyben függvény és dekorátor is. Az osztálypéldányoktól függetlenül működő módszerek kijelölésére szolgál. A Python dekorátorai olyan függvények, amelyek más módszerek viselkedését módosítják azáltal, hogy kiegészítő funkciókat adnak hozzá azok végrehajtása előtt vagy után, anélkül, hogy megváltoztatnák az eredeti függvénykódot. Az osztálypéldány-módszerekkel ellentétben a statikus függvények nem igényelnek implicit paramétert, mint például self.

staticmethod használata Pythonban egy fókuszált megközelítést kínál az osztályokon belüli függvények strukturálására, amelyek nem igényelnek hozzáférést az instáns adatokhoz. Mivel nem kötődnek egy instánshoz, nem módosíthatják az objektum állapotát. Az osztályokon belül értékes eszközként szolgálnak a gyakori feladatok végrehajtásához vagy globális funkcionalitás biztosításához. Például tartalmazhatnak segédprogramokat, konverziós rutinokat és általános segítő függvényeket, amelyek instáns adatok nélkül is meghívhatók.

Mi a Python staticmethod szintaxisa?

Kétféle módon lehet statikus metódusokat létrehozni Pythonban. Használhatod a staticmethod() függvényt vagy a @staticmethod dekorátort.

staticmethod()

staticmethod() egy beépített Python függvény, amely egy osztály módszerét statikussá teszi. A Python staticmethod() visszatérési értéke egy statikus módszer az argumentumként átadott függvényhez. A szintaxisa:

class Class:
    def staticmethodFunc(x,y):
        return x + y
Class.staticmethodFunc = staticmethod(Class.staticmethodFunc)
print('Sum = ', Class.staticmethodFunc(5,7)) # Output: Sum = 12
python

A Class osztályban definiált staticmethodFunc() függvényt argumentumként átadva staticmethod()nek, most már közvetlenül a osztálynévvel hívhatjuk meg az egyéni metódust.

@staticmethod

A @staticmethod dekorátor egy rövidebb és gyakoribb módszer egy függvény statikusként való megjelölésére. A dekorátor a osztálydefinícióban a metódus felett helyezkedik el. A szintaxisa:

class Class:
    @staticmethod
    def staticmethodFunc(x, y):
        return x + y
print('Sum = ', Class.staticmethodFunc(5,7)) # Output: Sum = 12
python

A @staticmethod dekorátor jelzi az értelmezőnek, hogy a definiált függvényt statikus metódusként kell kezelni.

Python staticmethod kódpéldák

A statikus módszerek számos feladatra használhatók. Az alábbiakban néhány gyakorlati példát mutatunk be a statikus módszerek használatára.

Egységek átváltása

A Python staticmethod nagyon hasznos az egységek átváltásához.

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.
python

Ebben a példában a Converter osztály két statikus metódussal rendelkezik az órák és percek közötti átváltáshoz. A hoursToMinutes() metódus az órákat percekre, minutesToHours() pedig a perceket órákra váltja át.

A statikus módszereket az osztálynévvel hívhatjuk meg anélkül, hogy létrehoznánk az osztály egy példányát. Ezekhez Converter.hoursToMinutes() vagy Converter.minutesToHours() segítségével férhetünk hozzá, ahol Converter az osztálynév. Az eredményt egy f-stringben adjuk ki, amely egy Python karakterláncformátum, amely összekapcsolja a kifejezéseket.

Kiegészítő funkciók matematikai számításokhoz

A Python staticmethod() függvényével is definiálhat segédfüggvényeket másodlagos számításokhoz.

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.
python

A kódpélda bemutatja a Calculator osztályt, amely statikus módszerekkel számítja ki egy szám négyzetét és négyzetgyökét. A @staticmethod dekorátort használjuk square() és sqroot() statikus módszerek megjelölésére. Az osztály példányának létrehozása nélkül a módszereket az osztálynévvel hívjuk meg. Calculator.square() és Calculator.sqroot() eredményeit f-stringben fűzzük össze.

A bejegyzések érvényesítése

A Python staticmethod funkciójának egy másik felhasználási területe a bevitelek érvényesítése.

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? True
python

A Validator osztály két statikus metódust tartalmaz: isInteger() és isDecimal(). Ezek a függvények ellenőrzik, hogy egy adott bemenet egész szám vagy tizedes szám-e. A Python statikus metódus isInteger() fogad egy bemenetet, és megpróbálja azt egész számmá konvertálni (int(num)). Ha ez sikerül, akkor True ad vissza. Ellenkező esetben False kapunk, ha egy kivétel ValueError fogunk el, ami akkor történik, ha az érvényesítés nem lehetséges.

A isDecimal() módszert használjuk a bemenet tizedes számmá történő konvertálásához (float(num)). Ha sikeres, akkor True ad vissza, ellenkező esetben False. Ezután a isInteger() és isDecimal() statikus módszereket használjuk az Validator osztályból a "123" és "3.14" bemenetek ellenőrzéséhez. Az eredmények mindkét függvény esetében igazak.

Karomok manipulálása

Az alábbi példában meghatározzuk az StringManipulation osztályt az reverseText() statikus metódussal. Ez egy szöveget vesz paraméterként, és a szeletelő szintaxist [::-1] használja a szöveg "Hello World!" megfordításához és az eredmény visszaadásához.

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 olleH
python
Ugrás a főmenübe