Найти - Пользователи
Полная версия: Вопрос об ООП Python
Начало » Python для новичков » Вопрос об ООП Python
1 2 3 4 5
Rudium
class Car:
    def __init__(self, type='общий', color='белый', whells=4, engine=100):
        self.type = type # тип автомобиля
        self.color = color # цвет автомобиля
        self.whells = whells # количество колес
        self.engine = engine # мощность двигателя
    def drive(self):
        "метод движения автомобиля"
        print('Автомобиль {0} едет'.format(self.type))
    def stop(self):
        "метод торможения автомобиля"
        print('Автомобиль {0} остановлен'.format(self.type))
    def signal(self):
        "метод звукового сигнала автомобиля"
        print('Автомобиль {0} сигналит'.format(self.type))
    def technical_passport(self):
        print('Тип автомобиля - {0}, количество колес - {1}, цвет - {2},'
              ' мощность двигателя - {3}'.format(self.type, self.whells, self.color, self.engine))
class FireTruck(Car):
    def extinguish_fires(self):
        "метод тушения пожара"
        print('Автомобиль {0} включил водомет'.format(self.type))
    def signal(self):
        "метод звукового сигнала автомобиля переопределен. Сигнал заменили на сирену."
        print('Автомобиль {0} включил сирену'.format(self.type))
car = Car()
car.drive()
car.stop()
car.signal()
car.technical_passport()
print('')
fire_truck = FireTruck(type='пожарный', color='красный', whells=6, engine=200)
fire_truck.drive()
fire_truck.stop()
fire_truck.signal()
fire_truck.extinguish_fires()
fire_truck.technical_passport()
Вот написал супер класс и подкласс. Представь что у класса Car может быть два десятка методов, которые являются общими для всех автомобилей, которые будут наследовать этот класс. И самих специализированных версий автомобилей будет два десятка. Например спортивный, полицейский, грузовой и т.д. Без наследования пришлось бы писать (20 методов умножить на 20 спецавтомобилей) = 400 методов. А в программировании повторять себя не очень хорошо. Проще наследовать общие характеристики, переопределить те, которые не подошли и дополнить специализированными.

Вывод python:
Автомобиль общий едет
Автомобиль общий остановлен
Автомобиль общий сигналит
Тип автомобиля - общий, количество колес - 4, цвет - белый, мощность двигателя - 100

Автомобиль пожарный едет
Автомобиль пожарный остановлен
Автомобиль пожарный включил сирену
Автомобиль пожарный включил водомет
Тип автомобиля - пожарный, количество колес - 6, цвет - красный, мощность двигателя - 200
Rudium
То что вы назвали ‘редачить код методов’ называется переопределением метода. В книге не совсем удачный пример приведен. Нет необходимости переопределять все методы родительского класса. Чаще всего совсем ничего не нужно переопределять. Только дополнять специализированными.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB