разделить двумя пустыми строками. Так вам будет проще увидеть, где кончается
одна функция и начинается другая.
Все команды
import
следует записывать в начале файла. У этого правила есть
только одно исключение: файл может начинаться с комментариев, описывающих
программу в целом.
УПРАЖНЕНИЯ
8-15 . Печать моделей: выделите функции примера print_models .py в отдельный файл с име-
нем printing_functions .py . Разместите команду import в начале файла print_models .py и из-
мените файл так, чтобы в нем использовались импортированные функции .
Итоги
159
8-16 . Импортирование: возьмите за основу одну из написанных вами программ с одной
функцией . Сохраните эту функцию в отдельном файле . Импортируйте функцию в файл
основной программы и вызовите функцию каждым из следующих способов:
import имя_модуля
from имя_модуля import имя_функции
from имя_модуля import имя_функции as псевдоним
import имя_модуля as псевдоним
from имя_модуля import *
8-17 . Стилевое оформление функций: выберите любые три программы, написанные для
этой главы . Убедитесь в том, что в них соблюдаются рекомендации стилевого оформления,
представленные в этом разделе .
Итоги
В этой главе вы научились писать функции и передавать аргументы, в которых
функциям сообщается информация, необходимая для их работы. Вы узнали, как
использовать позиционные и именованные аргументы и как передать функции про-
извольное количество аргументов. Вы видели функции, которые выводят данные,
и функции, которые возвращают значения. Вы научились использовать функции
со списками, словарями, командами
if
и циклами
while
. Также вы научились со-
хранять функции в отдельных файлах, называемых
модулями
, чтобы код ваших
программ стал проще и понятнее. Глава завершается рекомендациями по стилевому
оформлению функций, чтобы ваши программы были хорошо структурированы
и легко читались вами и другими разработчиками.
Каждый программист должен стремиться к написанию простого кода, который справ-
ляется с поставленной задачей, и функции помогают вам в этом. Вы сможете писать
блоки кода и оставлять их на будущее. Когда вы знаете, что функция правильно справ-
ляется со своей задачей, считайте, что она работает, и переходите к следующей задаче.
В программе с использованием функций единожды написанный код может заново
использоваться столько раз, сколько потребуется. Чтобы выполнить код, содержа-
щийся в функции, достаточно написать всего одну строку с вызовом, а функция
сделает все остальное. Если же потребуется модифицировать поведение функции,
достаточно внести изменения всего в одном месте; они вступят в силу повсюду, где
вызывается эта функция.
С функциями ваши программы проще читаются, а хорошо выбранные имена
функций описывают, что делает та или иная часть программы. Прочитав серию
вызовов функций, вы гораздо быстрее поймете, что делает функция, чем при чтении
длинной серии программных блоков.
Функции также упрощают тестирование и отладку кода. Когда основная работа про-
граммы выполняется набором функций, каждая из которых решает одну конкретную
задачу, вам будет намного проще организовать тестирование и сопровождение вашего
кода. Напишите отдельную программу, которая вызывает каждую функцию и про-
веряет ее работоспособность во всех типичных ситуациях. В этом случае вы можете
быть уверены в том, что ваши функции всегда работают правильно.
В главе 9 вы научитесь писать классы.
Классы
объединяют функции и данные
в один удобный пакет, с которым вы можете работать гибко и эффективно.
9
Классы
Объектно-ориентированное программирование по праву считается одной из
самых эффективных методологий создания программных продуктов. В объ-
ектно-ориентированном программировании вы пишете классы, описывающие
реально существующие предметы и ситуации, а затем создаете объекты на основе
этих описаний. При написании класса определяется общее поведение для целой
категории объектов.
Когда вы создаете конкретные объекты на базе этих классов, каждый объект
автоматически наделяется общим поведением; после этого вы можете наделить
каждый объект уникальными особенностями на свой выбор. Просто невероятно,
насколько хорошо реальные ситуации моделируются в объектно-ориентированном
программировании.
Создание объекта на основе класса называется
созданием экземпляра
; таким об-
разом, вы работаете с экземплярами класса. В этой главе вы будете писать классы
и создавать экземпляры этих классов. Вы укажете, какая информация может
храниться в экземплярах, и определите действия, которые могут выполняться
с экземплярами.
Также вы будете писать классы, расширяющие функциональность существу-
ющих классов; это позволяет организовать эффективное совместное использо-
вание кода похожими классами. Вы будете сохранять классы в модулях и импор-
тировать классы, написанные другими программистами, в ваши программные
файлы.
С хорошим пониманием объектно-ориентированного программирования вы взгля-
нете на мир с точки зрения программиста. Вам будет проще понять свой код —
увидеть не только то, что происходит в каждой его строке, но и более масштабные
концепции, лежащие в его основе. Логика, заложенная в основу классов, научит
вас мыслить последовательно, чтобы ваши программы эффективно решали прак-
тически любые задачи, с которыми вы можете столкнуться.
Кроме того, классы упрощают жизнь вам и другим программистам, с которыми вам
придется работать совместно над более серьезными проектами. Когда вы и другие
программисты пишете код, базирующийся на сходной логике, вам проще понять
код друг друга. Ваши программы будут понятны коллегам, и в результате все вы
сможете добиться лучших результатов.
Создание и использование класса
161
Создание и использование класса
Классы позволяют моделировать практически все что угодно. Начнем с написания
простого класса
Dog
, представляющего собаку — не какую-то конкретную, а собаку
вообще. Что мы знаем о собаках? У них есть кличка и возраст. Также известно, что
большинство собак умеют садиться и перекатываться по команде. Эти два вида
информации (кличка и возраст) и два вида поведения (сидеть и перекатываться)
будут включены в класс
Dog
, потому что они являются общими для большинства
собак. Класс сообщает Python, как создать объект, представляющий собаку. По-
сле того как класс будет написан, мы используем его для создания экземпляров,
каждый из которых представляет одну конкретную собаку.
Создание класса Dog
В каждом экземпляре, созданном на основе класса
Dog
, будет храниться кличка
и возраст; кроме того, в нем будут присутствовать методы
sit()
и
roll_over()
:
dog.py
class Dog():
"""Простая модель собаки."""
def __init__(self, name, age):
"""Инициализирует атрибуты name и age."""
self.name = name
self.age = age
def sit(self):
"""Собака садится по команде."""
print(self.name.title() + " is now sitting.")
def roll_over(self):
"""Собака перекатывается по команде."""
print(self.name.title() + " rolled over!")
В этом коде есть много мест, заслуживающих вашего внимания, но не беспокойтесь.
Эта структура неоднократно встретится вам в этой главе, и вы еще успеете к ней
привыкнуть. В точке
определяется класс с именем
Dog
. По общепринятым согла-
шениям имена, начинающиеся с символа верхнего регистра, в Python обозначают
классы. Круглые скобки в определении класса пусты, потому что класс создается
с нуля. В точке
приведена строка документации с кратким описанием класса.
Метод __init__()
Функция, являющаяся частью класса, называется
методом
. Все, что вы узнали
ранее о функциях, также относится и к методам; единственное практическое раз-
личие — способ вызова методов. Метод
__init__()
в точке
— специальный метод,
который автоматически выполняется при создании каждого нового экземпляра
на базе класса
Dog
. Имя метода начинается и заканчивается двумя символами
подчеркивания; эта схема предотвращает конфликты имен стандартных методов
Python и методов ваших классов.
162
Достарыңызбен бөлісу: |