Доброго времени суток, читатели, зрители моего канала programmer's notes.
Приложение к уроку
Иерархия функций (методов) в ООП Python
Начать следует с того, что есть просто функции, которые как известно тоже являются объектами. Но они выступают просто как экземпляры класса Функции.
Обычные методы
Дальше мы пойдём, я бы сказал снизу. Это функции, относящиеся к конкретному объекту класса или обыкновенные методы. Ниже представлены такие методы. Но есть нюанс! Всё, что внутри класса, можно попытаться использовать и с помощью имени класса. Просто при вызове сами (ручками) передаём тот объект, относительно которого, мы будем использовать метод (см. пример ниже). Отсюда следует, что для того, чтобы использовать такой метод, нужен созданный объект? Но это не точно ;). В случае с методом my(), можно, например, использовать просто None, ведь никакие свойства объекта там не используются. Вот такие интересные вещи всплывают.
Результат выполнения программы
100
Экземпляр
100
Статические методы
Чрезвычайно интересный тип методов. Статические методы. В сущности предполагается, что класс в данном случае просто определяет пространство имён для таких методов (функций). Чтобы определить такой метод используется так называемый декоратор @staticmethod. О декораторах мы еще поговорим в своё время. Но вот метод после декоратора и является статическим методом. Обратим внимание (см. ниже), что статический метод можно вызвать и через имя класса и через имя объекта. Конечно, это несколько вносит путаницу для начинающих, но, это очень логично для интерпретируемого языка, для которого весь класс является частью программы.
Но есть нюанс. Если убрать декоратор, то это всё равно будет статическим методом, но вызвать его с помощью имени объекта уже будет нельзя. Ну, а с помощью имени класса, конечно, можно.
Результат выполнения программы
10
10
Методы класса
Методы класса, интересная вещь. Используется декоратор @classmethod. В чем тут фокус? При обращении к такому методы не явно первым параметром передаётся имя класса (см. ниже). Т.е. параметру cl автоматически присваивается значение Myclass.
Результат выполнения программы
10
10
Ещё один пример на методы класса. Чем он интересен. Можно дополнительно передать имя объекта и для этого объекта в методе класса вызывать методы объекта. Да, вот так. ООП, конечно, замечательное. Я без иронии — мне это нравится.
Результат выполнения программы
Экземпляр
Экземпляр
10
Экземпляр
10
В заключении как напоминание
Всего наилучшего. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.