Вградената функция staticmethod () връща статичен метод за дадена функция.
Синтаксисът на staticmethod()
е:
staticmethod (функция)
Използването staticmethod()
се счита за непитоничен начин за създаване на статична функция.
Следователно в по-новите версии на Python можете да използвате @staticmethod
декоратора.
Синтаксисът на @staticmethod
е:
@staticmethod def func (аргументи, …)
staticmethod () Параметри
В staticmethod()
метода се един параметър:
- функция - функция, която трябва да бъде преобразувана в статичен метод
Връщане на стойност от staticmethod ()
На staticmethod()
връща статичен метод за функция минута като параметър.
Какво е статичен метод?
Статичните методи, подобно на методите на класа, са методи, които са свързани с клас, а не с неговия обект.
Те не изискват създаване на екземпляр на клас. Така че те не зависят от състоянието на обекта.
Разликата между статичен метод и метод на клас е:
- Статичният метод не знае нищо за класа и просто се занимава с параметрите.
- Методът на класа работи с класа, тъй като неговият параметър винаги е самият клас.
Те могат да бъдат извикани както от класа, така и от неговия обект.
Class.staticmethodFunc () или дори Class (). StaticmethodFunc ()
Пример 1: Създайте статичен метод, използвайки staticmethod ()
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
класа.