Рассмотрим задачу создания системы бронирования авиабилетов. У нас будет несколько классов, каждый из которых будет использоваться в других как атрибут.
class Passenger:
def __init__(self, name, passport_number):
self.name = name
self.passport_number = passport_number
class Flight:
def __init__(self, flight_number, destination):
self.flight_number = flight_number
self.destination = destination
class Booking:
def __init__(self, passenger, flight, seat_number):
self.passenger = passenger # Экземпляр Passenger
self.flight = flight # Экземпляр Flight
self.seat_number = seat_number
def get_booking_details(self):
return (f"Пассажир: {self.passenger.name}, "
f"Номер рейса: {self.flight.flight_number}, "
f"Место: {self.seat_number}, "
f"Направление: {self.flight.destination}")
# Создаем объекты Passenger и Flight
passenger = Passenger("Алексей Иванов", "123456789")
flight = Flight("SU1234", "Москва -> Нью-Йорк")
# Создаем объект Booking, передавая созданные экземпляры как атрибуты
booking = Booking(passenger, flight, "12A")
# Вывод информации о бронировании
print(booking.get_booking_details())
Вывод:
Пассажир: Алексей Иванов, Номер рейса: SU1234, Место: 12A, Направление: Москва -> Нью-Йорк
Объяснение: Этот пример демонстрирует, как классы Passenger
и Flight
используются как атрибуты в классе Booking
. Экземпляры этих классов передаются в объект бронирования и затем используются для отображения детальной информации о рейсе и пассажире.
В данном примере мы создадим классы для системы управления заказами в ресторане, где у каждого заказа есть блюда и клиент.
class Dish:
def __init__(self, name, price):
self.name = name
self.price = price
class Customer:
def __init__(self, name, table_number):
self.name = name
self.table_number = table_number
class Order:
def __init__(self, customer):
self.customer = customer
self.dishes = [] # Список экземпляров Dish
def add_dish(self, dish):
self.dishes.append(dish) # Добавляем экземпляр Dish в список блюд
def get_total_price(self):
return sum(dish.price for dish in self.dishes)
def print_order_details(self):
print(f"Заказ для {self.customer.name} (столик {self.customer.table_number}):")
for dish in self.dishes:
print(f"- {dish.name}: {dish.price} руб.")
print(f"Итоговая стоимость: {self.get_total_price()} руб.")
# Создаем клиента и заказы
customer = Customer("Ирина", 5)
order = Order(customer)
# Создаем блюда
dish1 = Dish("Борщ", 350)
dish2 = Dish("Салат Цезарь", 400)
dish3 = Dish("Чай", 150)
# Добавляем блюда в заказ
order.add_dish(dish1)
order.add_dish(dish2)
order.add_dish(dish3)
# Вывод информации о заказе
order.print_order_details()
Вывод:
Заказ для Ирина (столик 5):
- Борщ: 350 руб.
- Салат Цезарь: 400 руб.
- Чай: 150 руб.
Итоговая стоимость: 900 руб.
Объяснение: В этом примере у нас есть три класса: Dish
(блюдо), Customer
(клиент) и Order
(заказ). Экземпляры класса Dish
передаются в список атрибута dishes
в классе Order
, а сам клиент передается как атрибут. Мы можем добавить блюда в заказ и получить общую сумму, а также вывести детализированную информацию о заказе.
Теперь рассмотрим систему управления проектами, где у каждого проекта есть менеджер и несколько разработчиков, а также различные задачи.
class Developer:
def __init__(self, name, position):
self.name = name
self.position = position
class Task:
def __init__(self, title, complexity):
self.title = title
self.complexity = complexity # Уровень сложности задачи
class Project:
def __init__(self, name, manager):
self.name = name
self.manager = manager # Менеджер проекта (строка)
self.developers = [] # Список разработчиков
self.tasks = [] # Список задач
def add_developer(self, developer):
self.developers.append(developer) # Добавляем экземпляр Developer
def add_task(self, task):
self.tasks.append(task) # Добавляем экземпляр Task
def print_project_details(self):
print(f"Проект: {self.name}")
print(f"Менеджер: {self.manager}")
print("Разработчики:")
for dev in self.developers:
print(f"- {dev.name} ({dev.position})")
print("Задачи:")
for task in self.tasks:
print(f"- {task.title}, сложность: {task.complexity}")
# Создаем проект, разработчиков и задачи
project = Project("Система управления задачами", "Анна Петрова")
developer1 = Developer("Иван Иванов", "Backend-разработчик")
developer2 = Developer("Мария Сидорова", "Frontend-разработчик")
task1 = Task("Создать API для задач", "Высокая")
task2 = Task("Разработать интерфейс", "Средняя")
# Добавляем разработчиков и задачи в проект
project.add_developer(developer1)
project.add_developer(developer2)
project.add_task(task1)
project.add_task(task2)
# Вывод информации о проекте
project.print_project_details()
Вывод:
Проект: Система управления задачами
Менеджер: Анна Петрова
Разработчики:
- Иван Иванов (Backend-разработчик)
- Мария Сидорова (Frontend-разработчик)
Задачи:
- Создать API для задач, сложность: Высокая
- Разработать интерфейс, сложность: Средняя
Объяснение: Здесь классы Developer
(разработчик) и Task
(задача) используются как атрибуты в классе Project
(проект). Мы можем добавлять разработчиков и задачи в проект, а затем выводить всю информацию о проекте: менеджер, список разработчиков и задачи с указанием сложности.
Рассмотрим пример управления командой футболистов, где список игроков и тренер команды являются объектами классов.
class Player:
def __init__(self, name, position):
self.name = name
self.position = position
class Coach:
def __init__(self, name):
self.name = name
class Team:
def __init__(self, name, coach):
self.name = name
self.coach = coach # Экземпляр Coach как атрибут
self.players = [] # Список экземпляров Player
def add_player(self, player):
self.players.append(player)
def print_team_details(self):
print(f"Команда: {self.name}")
print(f"Тренер: {self.coach.name}")
print("Игроки:")
for player in self.players:
print(f"- {player.name}, позиция: {player.position}")
# Создаем команду, тренера и игроков
coach = Coach("Виктор Сергеев")
team = Team("Спартак", coach)
player1 = Player("Иван Кузнецов", "Нападающий")
player2 = Player("Алексей Смирнов", "Защитник")
# Добавляем игроков в команду
team.add_player(player1)
team.add_player(player2)
# Вывод информации о команде
team.print_team_details()
Вывод:
Команда: Спартак
Тренер: Виктор Сергеев
Игроки:
- Иван Кузнецов, позиция: Нападающий
- Алексей Смирнов, позиция: Защитник
Объяснение: Этот пример демонстрирует, как можно работать с командами и игроками. Класс Team
содержит список игроков, которые добавляются через метод add_player
, и тренера команды, который также передается в виде экземпляра класса Coach
.
Эти примеры показывают, как можно создавать сложные системы с использованием объектов в качестве атрибутов других классов. Они демонстрируют возможности применения классов в реальных сценариях, таких как управление проектами, системой заказов или спортивными командами.