📝 Python

Методы классов: объекты оживают

P
Автор
PyLand Team
📅
Опубликовано
03.04.2026
⏱️
Время чтения
2 мин
👁️
Просмотров
378
🌿
Уровень
Средний

Метод — функция, которая принадлежит объекту.

class ИмяКласса:
    def название_метода(self, параметры):
        # код метода
        pass

Метод всегда принимает self первым параметром.

Базовый пример

class Zombie:
    def __init__(self, name):
        self.name = name

    def groan(self):
        print(f"{self.name}: Граааах! 🧟")

walker = Zombie("Ходок")
walker.groan()  # Ходок: Граааах! 🧟

При вызове walker.groan() Python автоматически передаёт walker как self.

Методы с параметрами

class Zombie:
    def __init__(self, name, health):
        self.name = name
        self.health = health

    def take_damage(self, damage):
        self.health -= damage
        print(f"{self.name} получил {damage} урона. Здоровье: {self.health}")

walker = Zombie("Ходок", 50)
walker.take_damage(20)
# Ходок получил 20 урона. Здоровье: 30

Метод take_damage(self, damage) имеет 2 параметра, но вызывается с 1 аргументом — self передаётся автоматически.

Методы с возвратом (return)

class Zombie:
    def __init__(self, name, health):
        self.name = name
        self.health = health

    def is_alive(self):
        return self.health > 0

    def attack(self):
        import random
        return random.randint(5, 15)

walker = Zombie("Ходок", 30)
if walker.is_alive():
    damage = walker.attack()
    print(f"Зомби атакует! Урон: {damage}")

Методы вызывают методы

class Zombie:
    def __init__(self, name, health):
        self.name = name
        self.health = health

    def groan(self):
        print(f"{self.name}: Граааах!")

    def walk(self):
        print(f"{self.name} идёт...")

    def approach(self):
        self.walk()   # вызов другого метода
        self.groan()  # через self
        print(f"{self.name} приближается!")

walker = Zombie("Ходок", 50)
walker.approach()
# Ходок идёт...
# Ходок: Граааах!
# Ходок приближается!

Взаимодействие объектов

Методы могут изменять другие объекты:

class Human:
    def __init__(self, name, health):
        self.name = name
        self.health = health
        self.kills = 0

    def attack(self, zombie):
        damage = 20
        zombie.health -= damage
        print(f"{self.name} атакует {zombie.name}! Урон: {damage}")
        if zombie.health <= 0:
            print(f"{zombie.name} повержен!")
            self.kills += 1

class Zombie:
    def __init__(self, name, health):
        self.name = name
        self.health = health

rick = Human("Рик", 100)
walker = Zombie("Ходок", 40)

rick.attack(walker)  # Рик атакует Ходок! Урон: 20
rick.attack(walker)  # Рик атакует Ходок! Урон: 20 / Ходок повержен!
print(rick.kills)    # 1

Типы методов

Геттеры — возвращают данные:

def is_alive(self):
    return self.health > 0

def get_status(self):
    if self.health > 30:
        return "Здоров"
    elif self.health > 0:
        return "Ранен"
    return "Мёртв"

Сеттеры — изменяют данные с проверкой:

def set_health(self, value):
    self.health = max(0, value)  # не меньше 0

Действия — выполняют операции:

def attack(self):
    print(f"{self.name} атакует!")
    return 10

Частые ошибки

Ошибка 1: Забыли self в объявлении метода

def groan():       # ❌ TypeError: groan() takes 0 arguments but 1 was given
def groan(self):   # ✅

Ошибка 2: Вызов метода без скобок

damage = walker.attack   # ❌ — объект метода, не результат
damage = walker.attack() # ✅ — вызов метода

Лучшие практики

  • Название метода — глагол или вопрос: attack(), is_alive(), get_status()
  • Один метод — одна ответственность: shoot() только стреляет, не перезаряжает
  • Возвращайте значение, если результат нужен вызывающему коду
  • self.метод() для вызова других методов этого же объекта

Ваша реакция на статью

💬 Комментарии (0)

🔐 Войдите в систему, чтобы оставить комментарий
🚪 Войти
💭

Комментариев пока нет

Станьте первым, кто поделится мнением об этой статье!

🔗 Похожие

Похожие статьи

Продолжите изучение с этими материалами

📝

if __name__ == "__main__": точка входа Python

Конструкция if name == "main" определяет точку входа Python-программы: она помогает отличить прямой запуск файла...

📅 14.08.2026 👁️ 44
📝

strip() и lower(): подготавливаем пользовательски…

Пользователь может ввести правильное слово с лишними пробелами или буквами другого регистра. Для Python строки...

📅 11.08.2026 👁️ 50
📝

ord(), chr() и циклический сдвиг букв в Python 🔐

Строка состоит из символов, но компьютер хранит каждый символ как числовой код. Python позволяет переходить...

📅 09.08.2026 👁️ 89
🎓 Продолжить обучение

В каких курсах используется этот материал

Перейдите к курсу, чтобы закрепить материал на практике.

Python с нуля: 7 практических проектов Открыть программу курса