Экземпляр, статические методы и методы класса в Python: важные различия
Типы методов Python могут сбить с толку новичков. Это краткое руководство поможет вам понять различия и понять, когда использовать каждый из них.
Объектно-ориентированное программирование (ООП) — одна из самых популярных парадигм. Но некоторые концепции ООП сложны для понимания. Существует три типа методов Python, и их различия и цели часто могут сбивать с толку.
Чтобы написать хороший ООП-код Python, вы должны понимать разницу между методами экземпляра, статическими и классами.
3 типа методов в Python
В Python существует три типа методов: методы экземпляра, статические методы и методы класса.
Вам не всегда нужно учитывать эти различия для каждого написанного вами базового сценария Python. Но когда вы используете ООП в Python для написания более сложного кода, различия могут иметь большие последствия.
Понимание шаблонов декораторов
Прежде чем рассматривать различия, важно понять шаблон проектирования, известный как шаблон декоратора.
Декораторы звучат сложно, но бояться нечего. Декораторы — это просто функции. Вы можете написать их самостоятельно или использовать включенные в библиотеки или стандартную библиотеку Python.
Как и любая функция, декораторы выполняют задачу. Разница здесь в том, что декораторы применяют логику или изменяют поведение других функций. Они являются отличным способом повторного использования кода и помогают разделить логику на отдельные задачи.
Шаблон декоратора — это предпочтительный способ определения статических методов или методов класса в Python. Вот как это выглядит на Python:
class DecoratorExample:
""" Example Class """
def __init__(self):
""" Example Setup """
print('Hello, World!')
@staticmethod
def example_function():
""" This method is decorated! """
print('I\'m a decorated function!')
de = DecoratorExample()
de.example_function()
Декораторы должны предшествовать объявлению функции или класса. Они начинаются со знака @, и в отличие от обычных методов вам не нужно ставить круглые скобки в конце, если вы не передаете аргументы.
Можно комбинировать декораторы, писать свои собственные и применять их к классам, но для этих примеров вам не потребуется ничего этого делать.
Методы экземпляра в Python
Методы экземпляра — наиболее распространенный тип методов в классах Python. Они названы так потому, что могут получить доступ к уникальным данным своего экземпляра. Если у вас есть два объекта, каждый из которых создан из класса автомобиля, каждый из них может иметь разные свойства. Они могут иметь разные цвета, объемы двигателя, сиденья и так далее.
Методы экземпляра должны иметь self в качестве параметра, но вам не нужно передавать его каждый раз. Self — еще один специальный термин Python. Внутри любого метода экземпляра вы можете использовать self для доступа к любым данным или методам, которые могут находиться в вашем классе. Вы не сможете получить к ним доступ, не пройдя через self. Однако помимо self вы можете включить и другие параметры.
Наконец, поскольку методы экземпляра являются наиболее распространенными, декоратор не требуется. Когда вы создаете класс Python, его методы по умолчанию будут методами экземпляра.
Вот пример:
class DecoratorExample:
""" Example Class """
def __init__(self):
""" Example Setup """
print('Hello, World!')
self.name = 'Decorator_Example'
def example_function(self):
""" This method is an instance method! """
print('I\'m an instance method!')
print('My name is ' + self.name)
de = DecoratorExample()
de.example_function()
Доступ к переменной name осуществляется через self. Обратите внимание: когда вы вызываете example_function, вам не нужно передавать self — Python сделает это за вас.
Статические методы в Python
Статические методы — это методы, которые каким-то образом связаны с классом, но которым не требуется доступ к каким-либо данным, специфичным для класса. Вам не обязательно использовать self и даже не нужно создавать экземпляр, вы можете просто вызвать свой метод:
class DecoratorExample:
""" Example Class """
def __init__(self):
""" Example Setup """
print('Hello, World!')
@staticmethod
def example_function():
""" This method is a static method! """
print('I\'m a static method!')
de = DecoratorExample.example_function()
Декоратор @staticmethod использовался, чтобы сообщить Python, что этот метод является статическим.
Статические методы отлично подходят для служебных функций, которые выполняют задачу изолированно. Им не нужен (и не может) доступ к данным класса. Они должны быть полностью автономными и работать только с данными, переданными в качестве аргументов. Вы можете использовать статический метод, чтобы сложить два числа или напечатать заданную строку.
Методы класса в Python
Методы класса — это третий и последний тип метода ООП, который необходимо знать. Методы класса знают о своем классе. Они не могут получить доступ к конкретным данным экземпляра, но могут вызывать другие статические методы.
Методам класса не нужен self в качестве аргумента, но им нужен параметр cls. Это означает class и, как и self, он автоматически передается Python.
Методы класса создаются с помощью декоратора @classmethod.
class DecoratorExample:
""" Example Class """
def __init__(self):
""" Example Setup """
print('Hello, World!')
@classmethod
def example_function(cls):
""" This method is a class method! """
print('I\'m a class method!')
cls.some_other_function()
@staticmethod
def some_other_function():
print('Hello!')
de = DecoratorExample()
de.example_function()
Помните, что методы экземпляра могут манипулировать состоянием объекта и иметь доступ к самому классу через self. С другой стороны, методы класса не могут получить доступ к экземпляру класса, но могут получить доступ к самому классу. Это основное различие между методами класса и экземпляра в Python.
Поскольку методы класса могут манипулировать самим классом, они полезны при работе над более крупными и сложными проектами.
Какой метод Python следует использовать?
Выбор между типами методов Python может показаться трудным и трудным, но, немного попрактиковавшись, вы скоро освоите его.
Даже если вы пишете крошечные скрипты только для развлечения, изучение еще одной ООП-функции Python — это отличный навык, который может помочь облегчить устранение неполадок вашего кода и его повторное использование в будущем.