В прошлом уроке мы научились создавать классы и объекты, использовать конструктор __init__ и работать с атрибутами. Теперь пора глубже изучить методы — действия, которые могут выполнять объекты.
Методы позволяют объектам взаимодействовать друг с другом, изменять свои атрибуты и выполнять сложные операции. В этом уроке мы научимся создавать методы, работать с атрибутами внутри методов и создавать объекты, которые взаимодействуют друг с другом.
Метод экземпляра — это функция, определённая внутри класса, которая работает с конкретным объектом. Первым параметром метода всегда должен быть self.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def introduce(self):
print(f"Привет! Меня зовут {self.name}, мне {self.age} лет")
person = Person("Анна", 15)
person.introduce() # Вызов методаМетоды могут читать и изменять атрибуты объекта:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def have_birthday(self):
self.age += 1 # Изменяем атрибут
print(f"{self.name} теперь {self.age}
Методы могут принимать дополнительные параметры (кроме self):
class BankAccount:
def __init__(self, owner, balance):
self.owner = owner
self.balance = balance
def deposit(self, amount):
self.balance += amount
print(f"Пополнено {amount}. Баланс: {self.balance}
Объекты могут взаимодействовать друг с другом через методы:
class Person:
def __init__(self, name):
self.name = name
def greet(self, other_person):
print(f"{self.name} говорит: 'Привет, {other_person.name}!'")
person1 = Person("Анна")
person2 =
Полноценный класс для работы с людьми:
class Person:
def __init__(self, name, age, city):
self.name = name
self.age = age
self.city = city
def introduce(self):
print(f"Привет! Я {self.name}, мне {self.age
Класс для работы с автомобилями:
class Car:
def __init__(self, brand, model, color):
self.brand = brand
self.model = model
self.color = color
self.speed = 0
self.fuel = 100 # Процент топлива
def start_engine(self):
print
Класс для работы с банковским счётом:
class BankAccount:
def __init__(self, owner, balance=0):
self.owner = owner
self.balance = balance
print(f"Создан счёт для {owner}, начальный баланс: {balance}")
def deposit(self, amount):
if amount >
Что такое метод экземпляра?
Что выведет этот код?
class Person:
def __init__(self, name):
self.name = name
def greet(self):
print(f"Привет, я {self.name}")
person = Person("Анна")
person.greet()Что выведет этот код?
class Counter:
def __init__(self):
self.count = 0
def increment(self):
self.count += 1
def get_count(self):
return self.count
counter = Counter()
counter.increment()
counter.increment()
Создай класс Calculator с методом add(a, b), который возвращает сумму двух чисел. Создай объект и вызови метод.
class Calculator:
def add(self, a, b):
return a + b
calc = Calculator()
result = calc.add(5, 3)
print(result) # 8Добавь в класс Person метод change_name(new_name), который изменяет имя человека.
class Person:
def __init__(self, name):
self.name = name
def change_name(self, new_name):
self.name = new_name
print(f"Имя изменено на {new_name}")
person = Person("Анна")
person.change_name(
Создай класс Rectangle с методами area() и perimeter(), которые вычисляют площадь и периметр прямоугольника.
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
def perimeter(self):
return 2 * (self.
объект.метод().self — ссылка на текущий объект.self.self в определении метода — программа завершится ошибкой или даст неверный результат.self. при обращении к атрибутам внутри метода — программа завершится ошибкой или даст неверный результат.person.greet()) с обращением к атрибуту (person.name) — программа завершится ошибкой или даст неверный результат.Создай класс Student (Ученик) с конструктором, который принимает name (имя) и grade (класс). Добавь метод promote(), который увеличивает класс на 1. Создай ученика в 9 классе, вызови promote() и выведи его класс.
Создай класс Book (Книга) с конструктором, который принимает title (название) и pages (количество страниц). Добавь метод read(pages_read), который уменьшает количество непрочитанных страниц. Добавь атрибут pages_read (прочитано страниц) со значением 0 в конструкторе. Метод должен увеличивать pages_read и выводить, сколько страниц осталось прочитать.
Создай класс Phone (Телефон) с конструктором, который принимает brand (бренд) и model (модель). Добавь атрибут battery (батарея) со значением 100. Создай методы:
use(minutes) — уменьшает батарею на количество минут (1 минута = 1% батареи)charge() — заряжает телефон до 100%info() — выводит информацию о телефоне и уровне зарядаСоздай класс Rectangle (Прямоугольник) с конструктором, который принимает width (ширина) и height (высота). Добавь методы:
area() — возвращает площадьperimeter() — возвращает периметрscale(factor) — увеличивает ширину и высоту в factor разinfo() — выводит информацию о прямоугольникеСоздай класс BankAccount (Банковский счёт) с конструктором, который принимает owner (владелец) и начальный balance (баланс). Добавь методы:
deposit(amount) — пополняет счётwithdraw(amount) — снимает деньги (проверяй, достаточно ли средств)get_balance() — возвращает балансinfo() — выводит информацию о счётеСоздай класс Person (Человек) с конструктором, который принимает name (имя) и age (возраст). Добавь методы:
introduce() — выводит приветствие с именем и возрастомhave_birthday() — увеличивает возраст на 1greet(other_person) — приветствует другого человека (принимает объект Person)is_adult() — возвращает True, если возраст >= 18, иначе FalseСоздай двух людей и продемонстрируй их взаимодействие.
Создай класс Car (Автомобиль) с конструктором, который принимает brand (марка), model (модель) и color (цвет). Добавь атрибуты speed (скорость) = 0 и fuel (топливо) = 100. Создай методы:
start_engine() — запускает двигатель (выводит сообщение)accelerate(kmh) — увеличивает скорость и уменьшает топливо (1 км/ч = 0.1% топлива)brake() — останавливает машину (скорость = 0)refuel(amount) — заправляет машину (максимум 100%)info() — выводит полную информацию о машинеСоздай машину и продемонстрируй все методы.
ElectricCar БОНУССоздай класс ElectricCar, наследующий Car. Переопредели атрибут fuel как battery (батарея). Метод refuel переименуй в charge — он заряжает батарею. Метод accelerate уменьшает заряд батареи вдвое медленнее, чем расход топлива у обычной машины.
Fraction (дробь) БОНУССоздай класс Fraction с числителем и знаменателем. Добавь методы add(other) и simplify(). Метод simplify() сокращает дробь (найти НОД и делить). Метод add возвращает новую дробь — сумму двух дробей.