Statiniai metodai gali būti iš­kvie­čia­mi tie­sio­giai per klasės pa­va­di­ni­mą, nereikia kurti klasės instancės. Ši Python staticmethod savybė pa­leng­vi­na aiškų klasės logikos atskyrimą nuo instancės duomenų.

Kam nau­do­ja­mas Python staticmethod?

Python staticmethod yra ir funkcija, ir deko­ra­to­rius. Jis nau­do­ja­mas metodams, kurie veikia ne­pri­klau­so­mai nuo klasės instancų, žymėti. Deko­ra­to­riai Python kalboje yra funkcijos, kurios keičia kitų metodų elgesį, prieš arba po jų vykdymo pridedant papildomą funk­cio­na­lu­mą, ne­kei­čiant ori­gi­na­laus funkcijos kodo. Skir­tin­gai nuo ins­tan­ci­nių metodų, statinės funkcijos ne­rei­ka­lau­ja numanomo parametro, pvz., self.

staticmethod nau­do­ji­mas Python kalboje siūlo tikslingą požiūrį į funkcijų struk­tū­ri­za­vi­mą klasėse, kurioms nereikia prieigos prie ins­tan­ci­nių duomenų. Kadangi jos nėra susietos su ins­tan­ci­ja, jos negali keisti objekto būsenos. Klasėse jos yra vertingos priemonės bendroms užduotims atlikti ar glo­ba­lioms funk­ci­joms teikti. Pa­vyz­džiui, jos gali talpinti pa­gal­bi­nes programas, kon­ver­ta­vi­mo pro­ce­dū­ras ir bendras pa­gal­bi­nes funkcijas, kurias galima iškviesti be ins­tan­ci­nių duomenų.

Kokia yra Python staticmethod sintaksė?

Python kalboje yra du būdai sukurti statinius metodus. Galite naudoti staticmethod() funkciją arba @staticmethod deko­ra­to­rių.

staticmethod()

staticmethod() yra įdiegta Python funkcija, kuri klasės metodą paverčia statiniu. Python staticmethod() grą­ži­na­mo­ji reikšmė yra statinis metodas funkcijai, kuri per­duo­da­ma kaip ar­gu­men­tas. Sintaksė yra tokia:

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

Per­duo­da­mi staticmethodFunc() funkciją, apibrėžtą Class klasėje, kaip argumentą staticmethod(), dabar galime tie­sio­giai iškviesti pa­si­rink­ti­nį metodą per klasės pa­va­di­ni­mą.

@staticmethod

@staticmethod deko­ra­to­rius yra trum­pes­nis ir labiau paplitęs būdas pažymėti funkciją kaip statinę. Deko­ra­to­rius yra įrašomas virš metodo klasės api­brė­ži­me. Sintaksė yra tokia:

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

@staticmethod deko­ra­to­rius sig­na­li­zuo­ja in­ter­preta­to­riui, kad apibrėžta funkcija turėtų būti trak­tuo­ja­ma kaip statinis metodas.

Python staticmethod kodo pa­vyz­džiai

Statiniai metodai gali būti naudojami įvairioms užduotims atlikti. Toliau pa­tei­kia­mi keli prak­ti­niai pa­vyz­džiai, kaip naudoti statinius metodus.

Vienetų kon­ver­ta­vi­mas

Python staticmethod yra labai naudingas vienetų kon­ver­ta­vi­mui.

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

Šiame pavyzdyje klasė Converter turi du statinius metodus, skirtus valandų ir minučių kon­ver­ta­vi­mui. Metodas hoursToMinutes() kon­ver­tuo­ja valandas į minutes, o minutesToHours() – minutes į valandas.

Statiniai metodai gali būti iš­kvie­čia­mi per klasės pa­va­di­ni­mą, ne­su­ku­riant klasės eg­zemp­lio­riaus. Jie pa­sie­kia­mi per Converter.hoursToMinutes() arba Converter.minutesToHours(), kur Converter yra klasės pa­va­di­ni­mas. Re­zul­ta­tas išvedamas f-string formatu, Python stygos formatu, kuris jungia išraiškas.

Pa­gal­bi­nės funkcijos ma­te­ma­ti­niams skai­čia­vi­mams

Taip pat galite naudoti Python statinį metodą sta­tic­met­hod(), kad api­brėž­tu­mė­te pa­gal­bi­nes funkcijas ant­ri­niams skai­čia­vi­mams.

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

Kodo pavyzdyje pateikta Calculator klasė su sta­ti­niais metodais, skirtais skaičiaus kvadratui ir kvad­ra­ti­nei šakniai ap­skai­čiuo­ti. Naudojame @staticmethod deko­ra­to­rių, kad square() ir sqroot() pa­žy­mė­tu­me kaip statinius metodus. Ne­su­kur­da­mi klasės eg­zemp­lio­riaus, metodus iš­kvie­ta­me per klasės pa­va­di­ni­mą. Calculator.square() ir Calculator.sqroot() re­zul­ta­tus su­jun­gia­me f-eilutėje.

Įrašų pa­tvir­ti­ni­mas

Kitas Python statinio metodo nau­do­ji­mas yra įvesties pa­tvir­ti­ni­mas.

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

Validator klasė apima du statinius metodus: isInteger() ir isDecimal(). Šios funkcijos patikrina, ar pateiktas įvesties duomenys yra sveikasis skaičius ar de­šim­tai­nis skaičius. Python statinis metodas isInteger() paima įvesties duomenis ir bando juos kon­ver­tuo­ti į sveikąjį skaičių (int(num)). Jei tai pavyksta, grą­ži­na­mas True. Kitaip, jei aptinkama išimtis ValueError, kuri atsiranda, kai pa­tvir­ti­ni­mas ne­įma­no­mas, gauname False.

Naudojame isDecimal() metodą, kad įvestį kon­ver­tuo­tu­me į de­šim­tai­nį skaičių (float(num)). Jei pavyksta, grą­ži­na­mas True, kitaip – False. Tada naudojame isInteger() ir isDecimal() statinius Validator klasės metodus, kad pa­tik­rin­tu­me įvestis "123" ir "3.14". Abiejų funkcijų re­zul­ta­tai yra teisingi.

Stygų ma­ni­pu­lia­vi­mas

Toliau pa­teik­ta­me pavyzdyje api­brė­žia­me klasę StringManipulation su statiniu metodu reverseText(). Jis priima tekstą kaip parametrą ir naudoja skaidymo sintaksę [::-1], kad apverstų tekstą "Hello World!" ir grąžintų rezultatą.

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
Go to Main Menu