Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 120

тоды. Класс Yugo должен как-то отличаться от класса Car, иначе зачем вообще созда-

вать новый класс. Изменим способ работы метода exclaim() для класса Yugo:

>>> class Car():

... def exclaim(self):

... print("I'm a Car!")

...

>>> class Yugo(Car):

... def exclaim(self):

... print("I'm a Yugo! Much like a Car, but more Yugo-ish.")

...

Теперь создадим объекты этих классов:

>>> give_me_a_car = Car()

>>> give_me_a_yugo = Yugo()

162

Глава 6. Ой-ой-ой: объекты и классы

Что они говорят?

>>> give_me_a_car.exclaim()

I'm a Car!

>>> give_me_a_yugo.exclaim()

I'm a Yugo! Much like a Car, but more Yugo-ish.

В этих примерах мы перегрузили метод exclaim(). Перегрузить можно любые

методы, включая __init__(). Рассмотрим другой пример, который использует наш

более старый класс Person. Создадим подклассы, которые представляют докторов

(MDPerson) и адвокатов (JDPerson):

>>> class Person():

... def __init__(self, name):

... self.name = name

...

>>> class MDPerson(Person):

... def __init__(self, name):

... self.name = "Doctor " + name

...

>>> class JDPerson(Person):

... def __init__(self, name):

... self.name = name + ", Esquire"

...

В этих случаях метод инициализации __init__() принимает те же аргументы,

что и родительский класс Person, но внутри объекта сохраняет значение переменной

name разными способами:

>>> person = Person('Fudd')

>>> doctor = MDPerson('Fudd')

>>> lawyer = JDPerson('Fudd')

>>> print(person.name)

Fudd

>>> print(doctor.name)

Doctor Fudd

>>> print(lawyer.name)

Fudd, Esquire

Добавление метода

В класс-потомок можно также добавить метод, которого не было в родительском