← Назад к вопросам

Какие бывают методы в Python?

2.2 Middle🔥 131 комментариев
#Python

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Методы в Python: классификация и примеры

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

1. Методы экземпляра (Instance Methods)

Самый распространенный тип — методы, которые работают с данными конкретного объекта (экземпляра). Они принимают параметр self, ссылающийся на сам объект.

class Car:
    def __init__(self, brand, model):
        self.brand = brand
        self.model = model
    
    # Метод экземпляра
    def get_info(self):
        return f"{self.brand} {self.model}"

my_car = Car("Toyota", "Camry")
print(my_car.get_info())  # Toyota Camry

2. Методы класса (Class Methods)

Работают с самим классом, а не с экземпляром. Принимают параметр cls. Создаются с помощью декоратора @classmethod. Часто используются для фабричных методов.

class Person:
    population = 0
    
    def __init__(self, name):
        self.name = name
        Person.population += 1
    
    @classmethod
    def get_population(cls):
        return cls.population

print(Person.get_population())  # 0
person1 = Person("Alice")
print(Person.get_population())  # 1

3. Статические методы (Static Methods)

Не получают ни self, ни cls. Это обычные функции, логически связанные с классом. Создаются через декоратор @staticmethod.

class MathUtils:
    @staticmethod
    def add(x, y):
        return x + y
    
    @staticmethod
    def multiply(x, y):
        return x * y

print(MathUtils.add(5, 3))  # 8

4. Магические методы (Dunder Methods)

Методы с двойным подчеркиванием (__method__), которые вызываются автоматически при определенных операциях. Реализуют протоколы языка.

class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    
    # Магический метод для строкового представления
    def __str__(self):
        return f"Vector({self.x}, {self.y})"
    
    # Магический метод для сложения
    def __add__(self, other):
        return Vector(self.x + other.x, self.y + other.y)

v1 = Vector(2, 3)
v2 = Vector(4, 5)
print(v1)          # Vector(2, 3)
print(v1 + v2)     # Vector(6, 8)

5. Абстрактные методы (Abstract Methods)

Определяют интерфейс в абстрактных классах. Требуют реализации в дочерних классах. Используются с модулем abc.

from abc import ABC, abstractmethod

class Animal(ABC):
    @abstractmethod
    def make_sound(self):
        pass

class Dog(Animal):
    def make_sound(self):
        return "Woof!"

dog = Dog()
print(dog.make_sound())  # Woof!

6. Методы свойств (Property Methods)

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

class Temperature:
    def __init__(self, celsius):
        self._celsius = celsius
    
    @property
    def celsius(self):
        return self._celsius
    
    @celsius.setter
    def celsius(self, value):
        if value < -273.15:
            raise ValueError("Температура ниже абсолютного нуля!")
        self._celsius = value
    
    @property
    def fahrenheit(self):
        return self._celsius * 9/5 + 32

temp = Temperature(25)
print(temp.celsius)      # 25
print(temp.fahrenheit)   # 77.0
temp.celsius = 30

7. Методы-генераторы (Generator Methods)

Содержат ключевое слово yield и возвращают итератор.

class Countdown:
    def __init__(self, start):
        self.start = start
    
    def countdown(self):
        current = self.start
        while current > 0:
            yield current
            current -= 1

cd = Countdown(5)
for number in cd.countdown():
    print(number)  # 5, 4, 3, 2, 1

Ключевые различия и применение

  • Область видимости: Методы экземпляра работают с данными объекта, класс-методы — с атрибутами класса, статические — независимо.
  • Параметры: self для экземпляров, cls для классов, отсутствие параметров для статических.
  • Наследование: Все методы наследуются, но могут переопределяться.
  • Полиморфизм: Методы экземпляра поддерживают полиморфное поведение.
  • Инкапсуляция: Методы свойств обеспечивают контролируемый доступ к данным.

Понимание различных типов методов критично для проектирования эффективных и поддерживаемых объектно-ориентированных систем на Python. Каждый тип решает конкретные задачи: от работы с состоянием объектов до создания фабрик и утилитарных функций.