Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
fullcircle:30:python_ч_4 [2011/02/20 16:24] |
fullcircle:30:python_ч_4 [2015/12/03 20:43] (текущий) |
||
---|---|---|---|
Строка 20: | Строка 20: | ||
- [[..:40:python_ч_14|Программа на Python — часть 14]] | - [[..:40:python_ч_14|Программа на Python — часть 14]] | ||
- | В прошлый раз я обещал, что мы поговорим о классах. Итак, присту-пим. Что такое классы и что в них такого хорошего? | + | В прошлый раз я обещал, что мы поговорим о классах. Итак, приступим. Что такое классы и что в них такого хорошего? |
- | Класс — это способ построе-ния объектов. Объект — это способ группирования атрибутов и поведений. Я знаю, это звучит запутанно, но я вам объясню. Представьте это себе таким образом. Объект — это способ смоделировать что-либо в реальном мире. Класс — это метод, используемый нами для осуществления этого. Например, у нас дома есть три собаки: бигль, лабрадор и помесь немецкой овчарки с австра-лийским хилером. Все три — собаки, но все разные. У них есть общие черты, но есть и отличия. К примеру, бигль — низкий, пухлый, коричневый и сварливый. Лабрадор — среднего размера, чёрный и очень спокойный. Помесь овчарки и хилера — высокая, худая, чёрная и, более того, немного сумасшедшая. Сразу хорошо заметны некоторые атрибуты. Низкий, средних размеров, высокий — атрибуты роста. Сварливый, спокойный и сумасшедший — атрибуты характера. С точки зрения поведения можно рассмотреть приём пищи, сон, игры и другие действия. | + | Класс — это способ построения объектов. Объект — это способ группирования атрибутов и поведений. Я знаю, это звучит запутанно, но я вам объясню. Представьте это себе таким образом. Объект — это способ смоделировать что-либо в реальном мире. Класс — это метод, используемый нами для осуществления этого. Например, у нас дома есть три собаки: бигль, лабрадор и помесь немецкой овчарки с австралийским хилером. Все три — собаки, но все разные. У них есть общие черты, но есть и отличия. К примеру, бигль — низкий, пухлый, коричневый и сварливый. Лабрадор — среднего размера, чёрный и очень спокойный. Помесь овчарки и хилера — высокая, худая, чёрная и, более того, немного сумасшедшая. Сразу хорошо заметны некоторые атрибуты. Низкий, средних размеров, высокий — атрибуты роста. Сварливый, спокойный и сумасшедший — атрибуты характера. С точки зрения поведения можно рассмотреть приём пищи, сон, игры и другие действия. |
- | Все три — класса «Собака» (Dog). Вернёмся к приведённым выше атрибутам, используемым для описания каждой собаки. У нас получатся такие: Dog.Name (кличка), Dog.Height (рост), Dog.Build (телосложение) и Dog.Color (окрас). Также у нас есть варианты поведения, такие как: Dog.Bark (лай), Dog.Eat (приём пищи), Dog.Sleep (сон), и т. д. | + | Все три — представители класса «Собака» (Dog). Вернёмся к приведённым выше атрибутам, используемым для описания каждой собаки. У нас получатся такие: Dog.Name (кличка), Dog.Height (рост), Dog.Build (телосложение) и Dog.Color (окрас). Также у нас есть варианты поведения, такие как: Dog.Bark (лай), Dog.Eat (приём пищи), Dog.Sleep (сон), и т. д. |
Как я говорил ранее, собаки разных пород. Каждая порода будет подклассом класса Dog (собака). Схематически это будет выглядеть так. | Как я говорил ранее, собаки разных пород. Каждая порода будет подклассом класса Dog (собака). Схематически это будет выглядеть так. | ||
<code> | <code> | ||
- | /--Бигль | + | /--Бигль |
Собака ---|-- Лабрадор | Собака ---|-- Лабрадор | ||
- | \--Овчарка/Хилер | + | \--Овчарка/Хилер |
</code> | </code> | ||
Каждый подкласс наследует все атрибуты класса Dog. Поэтому, если мы создадим экземпляр Beagle (бигль), он получит все атрибуты родительского класса Dog. | Каждый подкласс наследует все атрибуты класса Dog. Поэтому, если мы создадим экземпляр Beagle (бигль), он получит все атрибуты родительского класса Dog. | ||
- | <code>Beagle = Dog() | + | <code> |
+ | Beagle = Dog() | ||
Beagle.Name = 'Арчи' | Beagle.Name = 'Арчи' | ||
Beagle.Height = 'Низкий' | Beagle.Height = 'Низкий' | ||
Beagle.Build = 'Пухлый' | Beagle.Build = 'Пухлый' | ||
- | Beagle.Color = 'Коричневый'</code> | + | Beagle.Color = 'Коричневый' |
+ | </code> | ||
Становится понятнее? Итак, давайте создадим наш простой класс Dog (показан выше). Нач-нём с ключевого слова «class» и названия нашего класса. | Становится понятнее? Итак, давайте создадим наш простой класс Dog (показан выше). Нач-нём с ключевого слова «class» и названия нашего класса. | ||
- | Перед тем, как углубиться в код, обратите внимание на функцию, которую мы здесь определили. Функция __init__ (два подчёркивания + init + два подчёркивания) — это инициализация, которая работает в любом классе. Она выполняется, как только мы вызываем в коде наш класс. В данном случае мы создали це-лый ряд параметров, устанавли-вающих основные сведения о нашем классе: кличка, окрас, рост, телосложение, настрое-ние, возраст и состояния «голо-ден» и «утомлён» (переменные «Hungry» и «Tired» соответ-ственно). Мы ещё вернёмся к ним. Теперь давайте добавим больше кода. | + | Перед тем, как углубиться в код, обратите внимание на функцию, которую мы здесь определили. Функция _init_ (два подчёркивания + init + два подчёркивания) — это инициализация, которая работает в любом классе. Она выполняется, как только мы вызываем в коде наш класс. В данном случае мы создали целый ряд параметров, устанавливающих основные сведения о нашем классе: кличка, окрас, рост, телосложение, настроение, возраст и состояния «голоен» и «утомлён» (переменные «Hungry» и «Tired» соответственно). Мы ещё вернёмся к ним. Теперь давайте добавим больше кода. |
- | <code>Beagle = Dog('Арчи','Коричневый','Низкий','Пухлый','Сварливый',12) | + | <code> |
+ | Beagle = Dog('Арчи','Коричневый','Низкий','Пухлый','Сварливый',12) | ||
print Beagle.name | print Beagle.name | ||
print Beagle.color | print Beagle.color | ||
print Beagle.mood | print Beagle.mood | ||
- | print Beagle.Hungry<code> | + | print Beagle.Hungry |
+ | </code> | ||
- | Этот код БЕЗ отступов и находится он вне нашего класса, используя его. Первая строка создаёт экземпляр (Beagle) нашего класса Dog.*Это — инстанцирование, процесс создания экземпляра класса. Вслед за этим мы также пере-дали определённую информа-цию экземпляру нашего класса (кличка бигля, его окрас и тому подобное). Следующие четыре строки получают информацию об объекте Beagle. Вставьте в класс Dog (после функции __init__) код, расположенный в правом верхнем блоке. | + | Этот код БЕЗ отступов и находится он вне нашего класса, используя его. Первая строка создаёт экземпляр (Beagle) нашего класса Dog.* Это — инстанцирование, процесс создания экземпляра класса. Вслед за этим мы также пере-дали определённую информацию экземпляру нашего класса (кличка бигля, его окрас и тому подобное). Следующие четыре строки получают информацию об объекте Beagle. Вставьте в класс Dog (после функции _init_) код, расположенный в правом верхнем блоке. |
- | Теперь мы можем использо-вать Beagle.Eat() или Beagle. Sleep(). Давайте добавим ещё один метод. Мы назовём его Bark. Его код показан справа. | + | Теперь мы можем использовать Beagle.Eat() или Beagle. Sleep(). Давайте добавим ещё один метод. Мы назовём его Bark. Его код показан справа. |
- | Сделаем его более гибким: в зависимости от настроения соба-ки лай будет меняться. На следующей странице показан полный код класса на данный момент. | + | Сделаем его более гибким: в зависимости от настроения собаки лай будет меняться. На следующей странице показан полный код класса на данный момент. |
Итак, если запустить скрипт, то получим: | Итак, если запустить скрипт, то получим: | ||
- | Моя кличка Арчи | + | Моя кличка Арчи\\ |
- | Мой окрас Коричневый | + | Мой окрас Коричневый\\ |
- | Моё настроение Сварливый | + | Моё настроение Сварливый\\ |
- | Я голоден = False | + | Я голоден = False\\ |
- | Нюх-нюх... Не голоден | + | Нюх-нюх... Не голоден\\ |
- | Ммм Ммм... Ням Ням | + | Ммм Ммм... Ням Ням\\ |
- | Рррррррр... Гав! Гав! | + | Рррррррр... Гав! Гав!\\ |
Что ж, мы позаботились о старом сварливом бигле. Однако, как я уже говорил, у меня три собаки. Так как класс мы написали продуманно, нам теперь осталось лишь создать ещё два экземпляра нашего класса. | Что ж, мы позаботились о старом сварливом бигле. Однако, как я уже говорил, у меня три собаки. Так как класс мы написали продуманно, нам теперь осталось лишь создать ещё два экземпляра нашего класса. | ||
- | <code>Lab = Dog('Нина','Чёрный','Средний','Крепкий','Спокойный',7) | + | <code> |
+ | Lab = Dog('Нина','Чёрный','Средний','Крепкий','Спокойный',7) | ||
Heeler = Dog('Медведь','Чёрный','Высокий','Худой','Сумасшедший',9) | Heeler = Dog('Медведь','Чёрный','Высокий','Худой','Сумасшедший',9) | ||
print 'Моя кличка %s' % Lab.name | print 'Моя кличка %s' % Lab.name | ||
Строка 77: | Строка 82: | ||
print 'Я голоден = %s' % Lab.Hungry | print 'Я голоден = %s' % Lab.Hungry | ||
Lab.Bark() | Lab.Bark() | ||
- | Heeler.Bark()</code> | + | Heeler.Bark() |
+ | </code> | ||
- | Заметьте, я создал экземпля-ры для обеих собак ещё до инструкций вывода на экран. Это не проблема, так как я «определил» экземпляр, прежде чем вызывать какой-либо метод. Вот полный вывод нашей программы. | + | Заметьте, я создал экземпляры для обеих собак ещё до инструкций вывода на экран. Это не проблема, так как я «определил» экземпляр, прежде чем вызывать какой-либо метод. Вот полный вывод нашей программы. |
- | Моя кличка Арчи | + | Моя кличка Арчи\\ |
- | Мой окрас Коричневый | + | Мой окрас Коричневый\\ |
- | Моё настроение Сварливый | + | Моё настроение Сварливый\\ |
- | Я голоден = False | + | Я голоден = False\\ |
- | Нюх-нюх... Не голоден | + | Нюх-нюх... Не голоден\\ |
- | Ммм Ммм... Ням Ням | + | Ммм Ммм... Ням Ням\\ |
- | Рррррррр... Гав! Гав! | + | Рррррррр... Гав! Гав!\\ |
- | Моя кличка Нина | + | Моя кличка Нина\\ |
- | Мой окрас Чёрный | + | Мой окрас Чёрный\\ |
- | Моё настроение Спокойный | + | Моё настроение Спокойный\\ |
- | Я голоден = False | + | Я голоден = False\\ |
- | Зевает... Ладно уж... Гав | + | Зевает...ok...Гав\\ |
- | Ав Ав Ав Ав Ав Ав Ав Ав Ав Ав Ав Ав | + | Ав Ав Ав Ав Ав Ав Ав Ав Ав Ав Ав Ав\\ |
Вы научились основам. В качестве домашнего задания расширьте класс Dog, чтобы он допускал большее количество методов, к примеру таких, как Play (играть), или Encounter StrangeDog (Повстречать НезнакомуюСобаку), или вроде того. | Вы научились основам. В качестве домашнего задания расширьте класс Dog, чтобы он допускал большее количество методов, к примеру таких, как Play (играть), или Encounter StrangeDog (Повстречать НезнакомуюСобаку), или вроде того. | ||
- | В следующий раз мы начнём обсуждать программирование GUI или Графического Интер-фейса Пользователя. Для этого мы воспользуемся Boa Constructor. | + | В следующий раз мы начнём обсуждать программирование GUI или Графического Интерфейса Пользователя. Для этого мы воспользуемся Boa Constructor. |
=====Коды===== | =====Коды===== | ||
Строка 102: | Строка 108: | ||
class Dog(): | class Dog(): | ||
def __init__(self,dogname,dogcolor,dogheight,dogbuild,dogmood,dogage): | def __init__(self,dogname,dogcolor,dogheight,dogbuild,dogmood,dogage): | ||
- | #здесь мы установим атрибуты для нашего класса «Собака» | + | #здесь мы установим атрибуты для нашего класса «Собака» |
self.name = dogname | self.name = dogname | ||
self.color = dogcolor | self.color = dogcolor | ||
Строка 112: | Строка 118: | ||
self.Tired = False | self.Tired = False | ||
- | def Eat(self): | + | def Eat(self): |
if self.Hungry: | if self.Hungry: | ||
print 'Ммм Ммм...Ням Ням' | print 'Ммм Ммм...Ням Ням' | ||
Строка 118: | Строка 124: | ||
else: | else: | ||
print 'Нюх-нюх...Не голоден' | print 'Нюх-нюх...Не голоден' | ||
- | def Sleep(self): | + | def Sleep(self): |
- | if self.Sleep: | + | if self.Tired: |
print 'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' | print 'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' | ||
self.Tired = False | self.Tired = False | ||
- | def Bark(self): | ||
- | if self.mood == 'Сварливый': | ||
- | print 'Рррррррр... Гав! Гав!' | ||
- | elif self.mood == 'Спокойный': | ||
- | print 'Зевает...ok...Гав' | ||
- | elif self.mood == 'Сумасшедший': | ||
- | print 'Ав Ав Ав Ав Ав Ав Ав Ав Ав Ав Ав Ав' | ||
- | else: | ||
- | print 'Гав! Гав!' | ||
- | class Dog(): | ||
- | def __init__(self,dogname,dogcolor,dogheight,dogbuild,dogmood,dogage): | ||
- | #здесь мы установим атрибуты для нашего класса «Собака» | ||
- | self.name = dogname | ||
- | self.color = dogcolor | ||
- | self.height = dogheight | ||
- | self.build = dogbuild | ||
- | self.mood = dogmood | ||
- | self.age = dogage | ||
- | self.Hungry = False | ||
- | self.Tired = False | ||
- | |||
- | def Eat(self): | ||
- | if self.Hungry: | ||
- | print 'Ммм Ммм...Ням Ням' | ||
- | self.Hungry = False | ||
- | else: | ||
- | print 'Нюх-нюх...Не голоден' | ||
- | |||
- | def Sleep(self): | ||
- | if self.Sleep: | ||
- | print 'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' | ||
- | self.Tired = False | ||
- | |||
def Bark(self): | def Bark(self): | ||
if self.mood == 'Сварливый': | if self.mood == 'Сварливый': | ||
Строка 174: | Строка 147: | ||
Beagle.Hungry = True | Beagle.Hungry = True | ||
Beagle.Eat() | Beagle.Eat() | ||
- | Beagle.Bark()</code> | + | Beagle.Bark() |
+ | </code> | ||
Строка 186: | Строка 160: | ||
{{tag>howto Full_Circle}} | {{tag>howto Full_Circle}} | ||
- |