Статические методы в Python с практическими примерами

В этом уроке вы узнаете о статических методах Python и о том, как их использовать для создания служебного класса.

Содержание

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

До сих пор вы изучали методы экземпляра, привязанные к конкретному экземпляру. Это означает, что методы экземпляра могут получать доступ к состоянию связанного объекта и изменять его. Кроме того, вы узнали о методах класса, привязанных к классу. Методы класса могут получать доступ к состоянию класса и изменять его.

В отличие от методов экземпляра, статические методы не привязаны к объекту. Другими словами, статические методы не могут получить доступ к состоянию объекта и изменить его.

Кроме того, Python не передает параметр cls (или параметр self) неявно в статические методы. Следовательно, статические методы не могут получить доступ к состоянию класса и изменить его.

На практике статические методы используются для определения служебных методов или групповых функций, которые имеют некоторые логические связи в классе.

Чтобы определить статический метод, используйте декоратор @staticmethod:

class className:
    @staticmethod
    def static_method_name(param_list):
        pass

Чтобы вызвать статический метод, используйте следующий синтаксис:

className.static_method_name()

Сравнение статических методов и методов класса в Python

Поскольку статические методы очень похожи на методы класса, вы можете использовать следующее сравнение, чтобы найти различия между ними:

Методы класса Статические методы
Python неявно передает аргумент cls методам класса. Python не передает аргумент cls неявно статическим методам.
Методы класса могут получать доступ к состоянию класса и изменять его. Статические методы не могут получить доступ к состоянию класса или изменить его.
Используйте декораторы @classmethod для определения методов класса. Используйте декораторы @staticmethod для определения статических методов.

Примеры статических методов Python

Ниже определяется класс под названием «TemperatureConverter», который имеет статические методы для преобразования температур между градусами Цельсия, Фаренгейта и Кельвина:

class TemperatureConverter:
    KEVIN = 'K',
    FAHRENHEIT = 'F'
    CELSIUS = 'C'

    @staticmethod
    def celsius_to_fahrenheit(c):
        return 9*c/5 + 32

    @staticmethod
    def fahrenheit_to_celsius(f):
        return 5*(f-32)/9

    @staticmethod
    def celsius_to_kelvin(c):
        return c + 273.15

    @staticmethod
    def kelvin_to_celsius(k):
        return k - 273.15

    @staticmethod
    def fahrenheit_to_kelvin(f):
        return 5*(f+459.67)/9

    @staticmethod
    def kelvin_to_fahrenheit(k):
        return 9*k/5 - 459.67

    @staticmethod
    def format(value, unit):
        symbol = ''
        if unit == TemperatureConverter.FAHRENHEIT:
            symbol = '°F'
        elif unit == TemperatureConverter.CELSIUS:
            symbol = '°C'
        elif unit == TemperatureConverter.KEVIN:
            symbol = '°K'

        return f'{value}{symbol}'

А для вызова класса TemperatureConverter вы используете следующее:

f = TemperatureConverter.celsius_to_fahrenheit(35)
print(TemperatureConverter.format(f, TemperatureConverter.FAHRENHEIT))
Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *