Важно: импортируйте модули и классы относительно корня проекта, а не папки с домашкой. То есть импорт исключений должен выглядеть так
from homework_02.exceptions import LowFuelError, NotEnoughFuelили такfrom homework_02 import exceptions, (а не такfrom exceptions import LowFuelError, NotEnoughFuel, и не такimport exceptions).Соответственно, импорт других классов тоже будет выглядеть так
from homework_02.base import Vehicle, но не такfrom base import Vehicle.
Не делайте переопределение методов, например
__init__, если внутри единственная строчка — это вызов родительского метода с теми же аргументамиsuper().__init__(...). Эта запись не несёт смысловой нагрузки (переопределить метод, чтобы вызвать родительский, с теми же аргументами). Есть смысл переопределять методы только если вы меняете их поведение (добавляете новые аргументы, устанавливаете новые свойства).
- скопируйте папку
homework_02для этой домашки (Памятка: https://github.com/OtusTeam/BasePython/tree/homeworks-new) - в модуле
exceptionsобъявите следующие исключения:LowFuelErrorNotEnoughFuelCargoOverload
- доработайте базовый класс
base.Vehicle:- добавьте атрибуты
weight,started,fuel,fuel_consumptionсо значениями по умолчанию - добавьте инициализатор для установки
weight,fuel,fuel_consumption - добавьте метод
start. При вызове этого метода необходимо проверить состояниеstarted. И если неstarted, то нужно проверить, что топлива больше нуля, и обновить состояниеstarted, иначе нужно выкинуть исключениеexceptions.LowFuelError - добавьте метод
move, который проверяет, что топлива достаточно для преодоления переданной дистанции (вплоть до полного расхода), и изменяет количество оставшегося топлива, иначе выкидывает исключениеexceptions.NotEnoughFuel
- добавьте атрибуты
- создайте датакласс
Engineв модулеengine, добавьте атрибутыvolumeиpistons - в модуле
carсоздайте классCar- класс
Carдолжен быть наследникомVehicle - добавьте атрибут
engineклассуCar - объявите метод
set_engine, который принимает в себя экземпляр объектаEngineи устанавливает на текущий экземплярCar
- класс
- в модуле
planeсоздайте классPlane- класс
Planeдолжен быть наследникомVehicle - добавьте атрибуты
cargoиmax_cargoклассуPlane - добавьте
max_cargoв инициализатор (переопределите родительский) - объявите метод
load_cargo, который принимает число, проверяет, что в сумме с текущимcargoне будет перегруза, и обновляет значение, в ином случае выкидывает исключениеexceptions.CargoOverload - объявите метод
remove_all_cargo, который обнуляет значениеcargoи возвращает значениеcargo, которое было до обнуления
- класс
- автоматический тест
test_homework_02проходит