Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 11, 2016 06:22:53

Rudium
Зарегистрирован: 2015-12-06
Сообщения: 114
Репутация: +  1  -
Профиль   Отправить e-mail  

Вопрос об ООП Python

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 (Фев. 11, 2016 07:48:50)

Офлайн

#2 Фев. 11, 2016 08:05:20

Rudium
Зарегистрирован: 2015-12-06
Сообщения: 114
Репутация: +  1  -
Профиль   Отправить e-mail  

Вопрос об ООП Python

То что вы назвали ‘редачить код методов’ называется переопределением метода. В книге не совсем удачный пример приведен. Нет необходимости переопределять все методы родительского класса. Чаще всего совсем ничего не нужно переопределять. Только дополнять специализированными.

Отредактировано Rudium (Фев. 11, 2016 08:05:49)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version