Как построить иерархию классов: продолжение
Посмотрите на код в редакторе еще раз. Вот что мы сделали:
- мы определили суперкласс с именем
Vehicle (транспортные средства)
, который использует методturn()
для реализации общей схемы поворота, в то время как сам разворот выполняется методом с именемchangedirection()
; примечание: первый метод пуст, поскольку мы собираемся поместить все детали в подкласс (такой метод часто называют абстрактным методом, поскольку он демонстрирует только некоторую возможность, которая будет реализована позже); - мы определили подкласс с именем
TrackedVehicle
(примечание: он является производным от классаVehicle
), который создал экземпляр методаchangeirection()
с помощью конкретного метода с именемcontroltrack()
; - соответственно, подкласс с именем
WheeledVehicle
выполняет тот же трюк, но использует методturnfrontwheel()
, чтобы заставить автомобиль поворачивать.
Самое важное преимущество (без проблем с читабельностью) состоит в том, что эта форма кода позволяет Вам реализовать новый алгоритм поворота, просто изменив метод turn()
, чтобы сделать все за один раз в одном месте, так как все транспортные средства будут подчиняться ему.
Именно так полиморфизм помогает разработчику поддерживать чистоту и согласованность кода.
Code
import timeclass 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 }}
×