Уграђена функција статицметход () враћа статичку методу за дату функцију.
Синтакса staticmethod()
је:
статицметход (функција)
Употреба staticmethod()
се сматра непитонским начином стварања статичке функције.
Отуда, у новијим верзијама Питхона, можете користити @staticmethod
декоратер.
Синтакса @staticmethod
је:
@статицметход деф фунц (аргс, …)
параметри статицметход ()
staticmethod()
Метод узима само један параметар:
- функција - функција коју треба претворити у статичку методу
Врати вредност из статицметход ()
У staticmethod()
враћа статички метод за функцију прошло као параметар.
Шта је статичка метода?
Статичке методе, слично као методе класе, су методе које су везане за класу, а не за њен објекат.
Не захтевају креирање инстанце класе. Дакле, они не зависе од стања предмета.
Разлика између статичке методе и методе класе је:
- Статичка метода не зна ништа о класи и само се бави параметрима.
- Метода класе ради са класом, јер је њен параметар увек сама класа.
Може их позвати и класа и њен објекат.
Цласс.статицметходФунц () или чак Цласс (). СтатицметходФунц ()
Пример 1: Креирајте статичку методу користећи статицметход ()
class Mathematics: def addNumbers(x, y): return x + y # create addNumbers static method Mathematics.addNumbers = staticmethod(Mathematics.addNumbers) print('The sum is:', Mathematics.addNumbers(5, 10))
Оутпут
Збир је: 15
Када користите статичке методе?
1. Груписање функције корисности у класу
Статичке методе имају ограничен случај употребе јер, попут метода класе или било којих других метода у класи, не могу приступити својствима саме класе.
Међутим, када вам је потребна услужна функција која не приступа ниједном својству класе, али има смисла да припада класи, користимо статичке функције.
Пример 2: Креирајте услужну функцију као статичку методу
class Dates: def __init__(self, date): self.date = date def getDate(self): return self.date @staticmethod def toDashDate(date): return date.replace("/", "-") date = Dates("15-12-2016") dateFromDB = "15/12/2016" dateWithDash = Dates.toDashDate(dateFromDB) if(date.getDate() == dateWithDash): print("Equal") else: print("Unequal")
Оутпут
Једнако
Овде имамо Dates
класу која ради само са датумима са цртицама. Међутим, у нашој претходној бази података сви датуми су били присутни у косим цртама.
Да бисмо претворили косе датуме у цртице, створили смо услужну функцију toDashDate
унутар Dates
.
То је статична метода јер не треба да приступи ниједном својству Dates
и захтева само параметре.
Такође можемо да креирамо toDashDate
изван класе, али пошто то функционише само за датуме, логично је да се задржи у Dates
класи.
2. Имати једну примену
Статичке методе се користе када не желимо да подкласе класе промене / замене одређену имплементацију методе.
Пример 3: Како наследство функционише статичким методом?
class Dates: def __init__(self, date): self.date = date def getDate(self): return self.date @staticmethod def toDashDate(date): return date.replace("/", "-") class DatesWithSlashes(Dates): def getDate(self): return Dates.toDashDate(self.date) date = Dates("15-12-2016") dateFromDB = DatesWithSlashes("15/12/2016") if(date.getDate() == dateFromDB.getDate()): print("Equal") else: print("Unequal")
Оутпут
Једнако
Овде не бисмо желели да поткласа DatesWithSlashes
замени статичку корисну методу, toDashDate
јер има само једнократну употребу, односно промену датума у цртице.
Могли бисмо лако користити статичку методу у своју корист тако што ћемо заменити getDate()
методу у подкласи тако да добро функционише са DatesWithSlashes
класом.