1. Введение
Что такое методы объектов в Python
В Python методы объектов — это функции, определённые внутри классов. Они позволяют объектам (экземплярам классов) выполнять действия или предоставлять доступ к своим данным. Методы обеспечивают объектно-ориентированную модель работы, делая код более логичным, читаемым и переиспользуемым. На данном этапе считается, что мы уже хорошо умеем создавать функции на Python и знаем как они работают.
Различие между методами класса, экземпляра и специальными методами
Методы в Python бывают разных типов: методы экземпляра, методы класса и специальные методы. Каждый из них играет свою роль:
- методы экземпляра управляют поведением конкретных объектов,
- методы класса оперируют самим классом как сущностью,
- специальные методы позволяют переопределить стандартное поведение объектов.
Знание этих различий помогает лучше управлять логикой программ. Далее пробежимся по всем трем типам.
2. Классификация методов объектов в Python
2.1. Методы экземпляра
Определение
Методы экземпляра — это функции, привязанные к конкретным объектам (экземплярам класса). Они позволяют работать с внутренним состоянием объекта.
Роль self
Первым параметром таких методов всегда является self, ссылающийся на сам объект. Через self метод получает доступ ко всем атрибутам и другим методам объекта. self - это каждый отдельный объект класса - экземпляр.
Примеры использования
class User:
def __init__(self, name):
self.name = name
def greet(self):
return f"Привет, {self.name}!"
В этом примере метод greet() обращается к атрибуту name через self. То есть, раз у каждого объекта класса User есть имя name, его можно получить через self.name.
Как через self обращаться к атрибутам и другим методам объекта
С помощью self можно:
- читать и изменять атрибуты объекта,
- вызывать другие методы того же экземпляра:
class Example:
def method_one(self):
print("Метод один")
def method_two(self):
self.method_one() # Вызов другого метода через self
2.2. Методы класса (class methods)
Объявление с помощью @classmethod
Методы класса объявляются с помощью декоратора @classmethod. Вместо self они получают первым параметром cls — ссылку на сам класс, а не на конкретный объект.
Роль cls
Параметр cls используется для доступа к атрибутам и методам самого класса.
Примеры: доступ к атрибутам класса, альтернативные конструкторы
class Product:
tax_rate = 0.2
def __init__(self, price):
self.price = price
@classmethod
def with_tax(cls, price_with_tax):
base_price = price_with_tax / (1 + cls.tax_rate)
return cls(base_price)
Метод with_tax() создает новый объект, используя знание о налоговой ставке — атрибуте класса.
Отличие от методов экземпляра
Методы экземпляра работают с конкретными объектами и могут обращаться к их уникальным атрибутам. Методы класса работают с самим классом, и обычно используются для логики, общей для всех объектов класса.
2.3. Специальные (магические) методы
Что такое специальные методы (дандеры)
Специальные методы в Python (или "магические", или "дандеры" — от double underscore) — это методы, имена которых начинаются и заканчиваются двойным подчёркиванием, например __init__, __str__. Они вызываются Python автоматически в определённых ситуациях.
Когда и зачем они вызываются автоматически
Эти методы позволяют кастомизировать стандартное поведение объектов:
- создание (__init__)
- преобразование в строку (__str__)
- вычисление длины (__len__)
- сравнение (__eq__) и другие.
Примеры популярных методов
- __init__(self, ...) — вызывается при создании объекта.
- __str__(self) — определяет строковое представление, например, в print().
- __len__(self) — вызывается функцией len().
- __eq__(self, other) — вызывается при сравнении ==.
Польза от переопределения специальных методов
Переопределяя специальные методы, вы можете:
- контролировать, как объекты создаются, отображаются и сравниваются,
- интегрировать свои классы с базовыми операциями Python,
- создавать выразительные и читаемые API.
3. Как получить только методы у объекта в Python?
Обзор способов получения методов
Часто возникает задача: как вывести список методов объекта или узнать методы объекта python. Например, при отладке или исследовании стороннего кода.
Для этого в Python есть несколько инструментов, включая стандартную функцию dir() и модуль inspect.
Функция dir()
dir(obj) возвращает список всех атрибутов и методов объекта:
print(dir(obj))
Однако результат включает как методы, так и данные, а также наследуемые члены. Чтобы выделить только методы, нужно фильтровать список.
Как фильтровать только методы
Использование inspect.ismethod и inspect.isfunction
Модуль inspect позволяет различать функции, методы, атрибуты и другие типы объектов:
import inspect
methods = [name for name, value in inspect.getmembers(obj, inspect.ismethod)]
Если объект — экземпляр класса, лучше использовать inspect.ismethod. Если вы работаете с самим классом, подойдёт inspect.isfunction.
Заключение
Подведение итогов: виды методов, способы получения списка
В Python существует три основных типа методов объектов:
- Методы экземпляра — используют self, работают с конкретным объектом;
- Методы класса — используют cls, работают с самим классом;
- Специальные методы — начинаются и заканчиваются двойным подчёркиванием и вызываются автоматически.
Для того чтобы узнать методы объекта в Python, можно использовать dir(), getattr() и модуль inspect. Это полезно при отладке, написании документации, тестировании и изучении кода.
Часто задаваемые вопросы (FAQ)
Как узнать, какие методы есть у объекта в Python?
Используйте dir(obj) или inspect.getmembers(obj, inspect.ismethod) для получения списка доступных методов.
Чем отличается метод класса от метода экземпляра?
Метод класса работает с классом как с объектом (cls), метод экземпляра — с конкретным экземпляром (self). Методы класса объявляются с помощью декоратора @classmethod.
Как получить список всех методов объекта Python?
С помощью модуля inspect:
import inspect
methods = [name for name, func in inspect.getmembers(obj, inspect.ismethod)]
Или с фильтрацией через dir() и callable().