Задача ООП Python. Посадить человека в автобус

Имеется следующая задача:

Создайте класс человек.
Создайте класс Ребенок с наследованием от класса Человек.
Создайте класс "автобус". В автобусе должно содержаться несколько детей - например в list.

Для класса автобус напишите методы добавления ребенка в автобус, удаления ребенка из автобуса.
У автобуса сделайте метод - при вызове которого будет меняться местоположение у всех детей, кто в нём находится на заданное (новое положение передавать в метод изменения положения).

У каждого ребенка сделайте хранение его текущего местоположения и методы для его изменения/отображения.

Я не могу понять, как мне одним методом в классе *Человек* одновременно обозначить, что человек находится в автобусе, и внести его в список пассажиров в экземпляре класса *Автобус*.

Вот все что смог написать сам:

class Human:
    name: str
    age: int

    def __init__(self, h_name, h_age):
        self.name = h_name
        self.age = h_age

    def info(self):
        print(f'Name {str(self.name)}')
        print(f'Age {str(self.age)}')


class Child(Human):
    bus_num: int
    in_bus: bool

    def __init__(self, h_name, h_age):
        super().__init__(h_name, h_age)
        self.bus_num = 0
        self.in_bus = False

    def info(self):
        super().info()
        print(f'In bus {str(self.in_bus)}')

    def get_in(self):
        self.in_bus = True

    def bus_out(self):
        self.in_bus = False

class Bus:
    capacity: int
    passengers: list

    def __init__(self, capacity):
        self.capacity = capacity
        self.passengers = [None] * capacity

Ответы (1 шт):

Автор решения: S. Nick

Я увидел вашу задачу так, смотрим ниже.

Обратите внимание, что реализовано не все, закончите самостоятельно и не забудьте сделать контроль чтобы количество пассажиров не превышало количества мест.

import random


class Human:
    name: str
    age: int

    def __init__(self, h_name, h_age):
        self.name = h_name
        self.age = h_age

    def info(self):
        print(f'\nName: {str(self.name)}')
        print(f'Age:  {str(self.age)}')


class Child(Human):
    bus_num: int
    in_bus: bool

    def __init__(self, h_name, h_age):
        super().__init__(h_name, h_age)
        self.bus_num = 0
        self.in_bus = False
# +
        self.name = h_name                                      # +
        self.age = h_age                                        # +
        
        self.info()                                             # +

    def info(self):
        super().info()
        print(f'In bus: {str(self.in_bus)}; {self.bus_num}\n')

    def get_in(self):
        self.in_bus = True

    def bus_out(self):
        self.in_bus = False

class Bus:
    capacity: int
    passengers: list

    def __init__(self, capacity):
        self.capacity = capacity
        self.passengers = [None] * capacity
        
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
    def add_child(self, name, age):
        child = Child(name, age)

        for i, passenger in enumerate(self.passengers):
            if not passenger:
                self.passengers[i] = child
                child.get_in()
                child.bus_num = i+1
                break
                
    def del_child(self, name, age):
        pass
        
    def shuffle_child(self):
        random.shuffle(self.passengers)
        for i, passenger in enumerate(self.passengers):
            if passenger:
                passenger.bus_num = i+1
        
        
bus = Bus(12)
print(f'passengers: {bus.passengers}')

bus.add_child("Name1", 11)
bus.add_child("Name2", 12)
bus.add_child("Name3", 13)
print(* bus.passengers, sep='\n')
print('-'*12, 'меняем местоположение у всех детей --------\n')

bus.shuffle_child()                # меняем местоположение у всех детей
print(* bus.passengers, sep='\n')
print('-'*40, ' добавляем 3-х детей ---\n')

bus.add_child("Name4", 14)
bus.add_child("Name5", 15)
bus.add_child("Name6", 16)

print(* bus.passengers, sep='\n')
print('-'*40, ' дети в автобусе и их места --- \n')

for passenger in bus.passengers:
    if passenger:
        print(f'name: {passenger.name}; '\
              f'age: {passenger.age}; '\
              f'bus_num: {passenger.bus_num}') #
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

введите сюда описание изображения

→ Ссылка