Module (79%)
Section (74%)

Как построить иерархию классов: продолжение

Посмотрите на код в редакторе еще раз. Вот что мы сделали:

  • мы определили суперкласс с именем Vehicle (транспортные средства), который использует метод turn() для реализации общей схемы поворота, в то время как сам разворот выполняется методом с именем changedirection(); примечание: первый метод пуст, поскольку мы собираемся поместить все детали в подкласс (такой метод часто называют абстрактным методом, поскольку он демонстрирует только некоторую возможность, которая будет реализована позже);
  • мы определили подкласс с именем TrackedVehicle (примечание: он является производным от класса Vehicle), который создал экземпляр метода changeirection() с помощью конкретного метода с именем controltrack();
  • соответственно, подкласс с именем WheeledVehicle выполняет тот же трюк, но использует метод turnfrontwheel(), чтобы заставить автомобиль поворачивать.

Самое важное преимущество (без проблем с читабельностью) состоит в том, что эта форма кода позволяет Вам реализовать новый алгоритм поворота, просто изменив метод turn(), чтобы сделать все за один раз в одном месте, так как все транспортные средства будут подчиняться ему.

Именно так полиморфизм помогает разработчику поддерживать чистоту и согласованность кода.



Code

import time

class Vehicle:
def change_direction(left, on):
pass

def turn(left):
change_direction(left, True)
time.sleep(0.25)
change_direction(left, False)


class TrackedVehicle(Vehicle):
def control_track(left, stop):
pass

def change_direction(left, on):
control_track(left, on)


class WheeledVehicle(Vehicle):
def turn_front_wheels(left, on):
pass

def change_direction(left, on):
turn_front_wheels(left, on)
{{ dockerServerErrorMsg }} ×
{{ errorMsg }} ×
{{ successMsg }} ×