Форум программистов, компьютерный форум, киберфорум
Фаер
Войти
Регистрация
Восстановить пароль

Python. ООП. Часть 1.

Запись от Фаер размещена 04.11.2012 в 10:32
Показов 5208 Комментарии 0
Метки python, ооп

Думаю, каждый человек, считающий себя программистом, слышал о некоем объектно - ориентированном программировании(ООП). В последнее время данная парадигма усиленно проникает во все сферы разработки ПО, несмотря на то, что приёмы ООП, якобы, снижают производительность программ, в которых используются. Однако с каждым днём компьютеры становятся всё мощнее, и проблема скорости выполнения и использования памяти становится всё менее значимой. На первый план выходит удобство. А ООП сильно упрощает разработку. Отсюда можно сделать совершенно правильный вывод: ООП нужно знать. Вот давайте и узнаем его.

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

Кроме того, следует запомнить такое понятие как класс. Класс - это, грубо говоря, "чистый" объект. Представьте себе таблицу с пустыми полями - это класс. Из этого класса можно взять только форму, трафарет. Заполненная таблица - это уже объект. Из неё можно взять не только поля, но и их содержимое.

Стандартный API Python'а включает в себя множество классов самого разного назначения, и Вы, наверняка, уже пользовались некоторыми из них. Например, все Мы знаем, что такое список(list). Чаще всего он вводится в программу таким образом:
Python
1
sp=[1,5,2]
Однако есть и другой способ создания списка:

Python
1
sp=list((1,5,2))#двойные скобки означают, что передаётся один объект - кортеж
Где list() - это как бы форма, а (1,5,2) - данные, которые в эту форму записываются. Отсюда следует, что список - это класс, в чём можно легко убедиться, написав в Python'е команду

Python
1
help(list)# в результате Вы получите описание класса list
Полученный Нами список sp - это экземпляр класса list.
Если Вы написали команду help(list), то должно быть обратили внимание на то, что в описании данного класса имеется множество строк, напоминающих команды вызова подпрограмм, только без аргументов. Так оно и есть: каждый класс содержит в себе несколько функций, которые определяют его поведение. Эти самые функции назваются методами. Класс без методов - это просто набор данных, с которыми ничего нельзя сделать. Давайте сделаем такой набор данных, чтобы начать с начала начал:

Python
1
2
3
4
5
class car:
    def __init__(self,name,color,speed=200):
        self.name=name
        self.color=color
        self.speed=speed
Данный класс содержит в себе только один метод __init__() - конструктор. В скобках Мы описываем характеристики, присущие экземплярам класса car(). Набор характеристик объекта называется абстракцией. Возможно у Вас возник совершенно уместный вопрос: что такое self? Это есть самая сущность класса(достаточно вспомнить, что вставка self(yourself,herself) это эквивалент русской -ся, что означает "себя"(умываться = умывать себя)). Для большей наглядности, в этом же скрипте напишите:

Python
1
2
3
4
a=car('Audi','Green')#это инстанцирование - создание экземпляра класса
a.name  #если запускаете скрипт через консоль, пишите print(a.name)
a.name='BMW'
a.name
Третья строка очень похожа на строку self.name=name. Это она и есть. Разница состоит в том, что когда Мы описываем класс, Мы не имеем непосредственно объекта, только форму, с помощью которой его можно сконструировать, а значит в Нашем распоряжении есть только "безликий" self. А вот после ввода строки a=car('Audi','Green') Мы имеем самый настоящий объект и self заменяется переменной, ссылающейся на экземпляр класса(в Нашем случае это переменная a). Заметьте, что при конструировании было передано только два аргумента, тогда как функция __init__ принимает целых четыре. self, как Мы узнали, это a - переменная, ссылающаяся на создаваемый Нами экземпляр класса car. Два следующих аргумента переданы вполне добросовестно: объект a приобрёл два параметра - name и color. Однако, он так же имеет и третий параметр - speed. Дело в том, что ещё описывая сам класс, Мы установили значение по умолчанию: speed=200. Если при инстанцировании аргумент, в Нашем случае третий, не был передан, ему присваивается значение, указанное в строке def __init__():, при условии, что оно там имеется. Если же его там нет, Вы получите ошибку типа:

Python
1
TypeError: __init__() takes at least 3 arguments (2 given)
так что будьте осторожней. Аргументы, имеющие значение по умолчанию, должны быть описаны в строке def __init__(): в последнюю очередь. Не забывайте об этом!
Теперь давайте напишем метод класса:

Python
1
2
3
4
5
6
7
8
9
10
11
12
class car:
    def __init__(self,name,color,speed=200):
        self.name=name
        self.color=color
        self.speed=speed
    def accelerate(self,nspeed):
        self.speed+=nspeed
 
a=car('Audi','Red',100)
a.speed
a.accelerate(50)
a.speed
accelerate - метод класса car, который, принимая сторонний аргумент nspeed, увеличивает параметр a.speed на только что принятую величину(на всякий случай замечу, что a+=1 это то же самое, что a=a+1). Как видите, Мы передали методу не только nspeed, но и self. Ведь Нам нужно изменить не просто переменную, а привязанный к объекту параметр, следовательно без self(a.) - самого объекта, Нам не обойтись.
Но, разумеется, это только пример, методы могут совершать практически любые действия и за пределами характеристик объекта...
Метки python, ооп
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru