Читаем Простой Python полностью

The mighty hunter: Elmer Fudd

Помните, внутри определения класса Person вы получаете доступ к атрибуту name с помощью конструкции self.name. Когда вы создаете реальный объект вроде hunter, то ссылаетесь на этот атрибут как hunter.name.

Не обязательно иметь метод __init__ в описании каждого класса, он используется для того, чтобы различать объекты одного класса.

Наследование

Может случиться, что, пытаясь решить какую-то задачу, вы обнаружите, что уже существует класс, создающий объекты, которые делают почти все из того, что вам нужно. Что вы можете предпринять? Вы можете модифицировать этот старый класс, но при этом сделаете его сложнее и можете сломать что-то, что раньше работало.

Конечно, можно написать новый класс, скопировав и вставив содержимое старого класса, а затем дополнить его новым кодом. Но это значит, что вам придется поддерживать больше кода и части старого и нового классов могут быть непохожими друг на друга, поскольку теперь находятся в разных местах.

Решением проблемы является наследование — создание нового класса из уже существующего, который при этом содержит какие-то дополнения и изменения. Это отличный способ использовать код повторно. Когда вы применяете наследование, новый класс может автоматически использовать весь код старого класса и при этом вам не нужно его копировать.

Вы определяете только то, что вам нужно добавить или изменить в новом классе, и этот код переопределяет поведение старого класса. Оригинальный класс называется предком, суперклассом или базовым классом, новый класс называется потомком, подклассом или классом-наследником. Эти термины в объектно-ориентированном программировании взаимозаменяемы.

Давайте же что-нибудь унаследуем. Мы определим пустой класс, который называется Car. Далее определим подкласс класса Car, который называется Yugo. Вы определяете подкласс с помощью все того же ключевого слова class, но указывая внутри скобок имя родительского класса (class Yugo(Car), как показано ниже):

>>> class Car():

…·····pass

>>> class Yugo(Car):

…·····pass

Далее создадим объекты каждого класса:

>>> give_me_a_car = Car()

>>> give_me_a_yugo = Yugo()

Класс-потомок является уточненной версией класса-предка; если говорить в терминах объектно-ориентированных языков, Yugo является Car. Объект с именем give_me_a_yugo является экземпляром класса Yugo, но он также наследует все то, что может делать класс Car. В нашем случае классы Car и Yugo полезны как мертвому припарки, поэтому попробуем указать их новые определения, которые действительно могут что-то сделать:

>>> class Car():

…·····def exclaim(self):

…·········print("I'm a Car!")

>>> class Yugo(Car):

…·····pass

Наконец, создадим по одному объекту каждого класса и вызовем их методы exclaim:

>>> give_me_a_car = Car()

>>> give_me_a_yugo = Yugo()

>>> give_me_a_car.exclaim()

I'm a Car!

>>> give_me_a_yugo.exclaim()

I'm a Car!

Не сделав ничего особенного, класс Yugo унаследовал метод exclaim() класса Car. Фактически класс Yugo говорит, что он является классом Car, что может привести к кризису самоопределения. Посмотрим, что мы можем с этим сделать.

Перегрузка метода

Как вы только что увидели, новый класс наследует все, что находится в его классе-предке. Далее вы увидите, как можно заменить, или перегрузить, родительские методы. Класс 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()

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

>>> 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):

Перейти на страницу:

Все книги серии Бестселлеры O'Reilly

Искусство управления IT-проектами
Искусство управления IT-проектами

В отличие от множества трудов, посвященных руководству проектами и командами, в этой книге не проповедуются никакие новые учения и не превозносятся великие теории. Скотт Беркун считает залогом успеха практику и разнообразие подходов. В книге описываются основные сложности и проблемные ситуации, возникающие в работе менеджера проекта, даны рекомендации по выходу из них.Издание предназначено не только для лидеров команд и менеджеров высшего звена, но и для программистов, тестеров и других исполнителей конкретных проектных заданий. Также оно будет полезно студентам, изучающим бизнес-менеджмент, проектирование изделий или программную инженерию.Текст нового издания значительно переработан автором с целью добиться большей ясности, кроме того, книга дополнена новым приложением и более чем 120 практическими упражнениями.

Скотт Беркун

Деловая литература
iOS. Приемы программирования
iOS. Приемы программирования

Книга, которую вы держите в руках, представляет собой новый, полностью переписанный сборник приемов программирования по работе с iOS. Он поможет вам справиться с наболевшими проблемами, с которыми приходится сталкиваться при разработке приложений для iPhone, iPad и iPod Touch. Вы быстро освоите всю информацию, необходимую для начала работы с iOS 7 SDK, в частности познакомитесь с решениями для добавления в ваши приложения реалистичной физики или движений — в этом вам помогут API UIKit Dynamics.Вы изучите новые многочисленные способы хранения и защиты данных, отправки и получения уведомлений, улучшения и анимации графики, управления файлами и каталогами, а также рассмотрите многие другие темы. При описании каждого приема программирования приводятся образцы кода, которые вы можете смело использовать.

Вандад Нахавандипур

Программирование, программы, базы данных / Программирование / Книги по IT

Похожие книги

3ds Max 2008
3ds Max 2008

Одни уверены, что нет лучшего способа обучения 3ds Мах, чем прочитать хорошую книгу. Другие склоняются к тому, что эффективнее учиться у преподавателя, который показывает, что и как нужно делать. Данное издание объединяет оба подхода. Его цель – сделать освоение 3ds Мах 2008 максимально быстрым и результативным. Часто после изучения книги у читателя возникают вопросы, почему не получился тот или иной пример. Видеокурс – это гарантия, что такие вопросы не возникнут: ведь автор не только рассказывает, но и показывает, как нужно работать в 3ds Мах.В отличие от большинства интерактивных курсов, где работа в 3ds Мах иллюстрируется на кубиках-шариках, данный видеокурс полностью практический. Все приемы работы с инструментами 3ds Мах 2008 показаны на конкретных примерах, благодаря чему после просмотра курса читатель сможет самостоятельно выполнять даже сложные проекты.

Владимир Антонович Верстак , Владимир Верстак

Программирование, программы, базы данных / Программное обеспечение / Книги по IT