Метод — функция, которая принадлежит объекту.
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)
Комментариев пока нет
Станьте первым, кто поделится мнением об этой статье!