English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основной курс Python

Контроль потока в Python

Функции в Python

Типы данных в Python

Операции с файлами в Python

Объекты и классы в Python

Даты и время в Python

Продвинутые знания Python

Руководство Python

Метод использованияstaticmethod() вPython и примеры

Внутренние функции Python

Внутренняя функцияstaticmethod() возвращает статический метод для заданной функции.

Синтаксисstaticmethod():

staticmethod(function)

Использованиеstaticmethod() считается нестандартным способом создания статических функций в Python.

Таким образом, в более новых версиях Python вы можете использовать декоратор@staticmethod.

Синтаксис@staticmethod:

staticmethod
def func(args, ...)

Параметрыstaticmethod()

staticmethod() принимает один параметр:

  • функция - функция, которую нужно преобразовать в статическую

Возврат значенийstaticmethod()

staticmethod() возвращает статический метод для переданной функции.

Что такое статические методы?

Статические методы сКлассовые методыОни очень похожи, так как это методы, привязанные к классу, а не к объекту.

они не требуют создания экземпляра класса. Таким образом, они не зависят от состояния объекта.

Разница между статическими и классовыми методами:

  • Статические методы не знают о классе, они обрабатывают только параметры.

  • Классовые методы используются вместе с классом, так как их параметр всегда сам класс.

их можно вызывать как через класс, так и через объекты.

Class.staticmethodFunc()
или даже
Class().staticmethodFunc()

Пример 1: Создание статического метода с помощьюstaticmethod()

class Mathematics:
    def addNumbers(x, y):
        return x + y
# Создание статического метода addNumbers
Mathematics.addNumbers = staticmethod(Mathematics.addNumbers)
print('Общее количество:', 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")

Результат вывода

Equal

Здесь у нас есть класс 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")

Результат вывода

Equal

Здесь мы не хотим, чтобы подкласс DatesWithSlashes переопределял статическую утилитарную функцию toDashDate, так как у нее есть только одно использование - изменить date на dash-date.

С помощью перезаписи метода getDate() в подклассе мы можем легко использовать статические методы, чтобы использовать свои преимущества и работать вместе с классом DatesWithSlashes.

Внутренние функции Python