Python staticmethod ()

Вградената функция 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класа.

Интересни статии...