Статические методы в Python с практическими примерами
В этом уроке вы узнаете о статических методах Python и о том, как их использовать для создания служебного класса.
- Что такое статические методы в Python?
- Сравнение статических методов и методов класса в 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))