Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
fullcircle:30:python_ч_4 [2010/10/08 19:35] |
fullcircle:30:python_ч_4 [2015/12/03 20:43] (текущий) |
||
---|---|---|---|
Строка 3: | Строка 3: | ||
//Автор — Грэг Валтерс (Greg Walters)// | //Автор — Грэг Валтерс (Greg Walters)// | ||
</style> | </style> | ||
+ | |||
- [[..:27:python_ч_1|Программа на Python — часть 1]] | - [[..:27:python_ч_1|Программа на Python — часть 1]] | ||
Строка 15: | Строка 16: | ||
- [[..:36:python_ч_10|Программа на Python — часть 10]] | - [[..:36:python_ч_10|Программа на Python — часть 10]] | ||
- [[..:37:python_ч_11|Программа на Python — часть 11]] | - [[..:37:python_ч_11|Программа на Python — часть 11]] | ||
+ | - [[..:38:python_ч_12|Программа на Python — часть 12]] | ||
+ | - [[..:39:python_ч_13|Программа на Python — часть 13]] | ||
+ | - [[..:40:python_ч_14|Программа на Python — часть 14]] | ||
- | В прошлый раз я обещал поговорить о классах. Давайте сконцентрируемся на этом. Что такое классы и чем они полезны? | + | В прошлый раз я обещал, что мы поговорим о классах. Итак, приступим. Что такое классы и что в них такого хорошего? |
- | Классы - это способ создания объектов. Объект - это простой способ обработки атрибутов и обращений как группа. Я знаю, сбивает с толку, я объясню это для Вас. Продумайте план работы. Объект - это способ моделирования чего-либо в реальной жизни. А класс - это способ для осущетвления этого. Например, у нас дома есть три собаки: короткая Гончая, Лабрадор и немецкая Овчарка. Все они собаки, но они разные. У них есть обычные отличительные черты среди их троих, но каждая собака имеет свою отличительную черту. Например, Гончая короткая, пухлая, коричневая, и раздражительная. Лабрадор средней длины, чёрная и очень спокойная. Овчарка длинная, тощая, чёрная, и немного бешеная. На первый взгляд, некоторые свойства очевидны. Коротка/средняя/длинный - это атрибуты роста. Раздражительная, спокойная, и бешеная - атрибуты характера. Зная эти данные, мы можем обдумать процессы питания, сна, игр, и других действий. | + | Класс — это способ построения объектов. Объект — это способ группирования атрибутов и поведений. Я знаю, это звучит запутанно, но я вам объясню. Представьте это себе таким образом. Объект — это способ смоделировать что-либо в реальном мире. Класс — это метод, используемый нами для осуществления этого. Например, у нас дома есть три собаки: бигль, лабрадор и помесь немецкой овчарки с австралийским хилером. Все три — собаки, но все разные. У них есть общие черты, но есть и отличия. К примеру, бигль — низкий, пухлый, коричневый и сварливый. Лабрадор — среднего размера, чёрный и очень спокойный. Помесь овчарки и хилера — высокая, худая, чёрная и, более того, немного сумасшедшая. Сразу хорошо заметны некоторые атрибуты. Низкий, средних размеров, высокий — атрибуты роста. Сварливый, спокойный и сумасшедший — атрибуты характера. С точки зрения поведения можно рассмотреть приём пищи, сон, игры и другие действия. |
- | Они трое относяться к классу "Dog". Возвращаясь назад к свойствам, которые мы использовали для описания каждого, мы имеем Dog.Name (имя), Dog.Height (длина), Dog.Build (сложение тела - тощая, пухлая, и др.), and 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> | ||
- | /-- Beagle (короткая Гончая) | + | /--Бигль |
- | Dog ---|--Lab (Лабрадор) | + | Собака ---|-- Лабрадор |
- | \-- Shepherd/Heeler (немецкая Овчарка) | + | \--Овчарка/Хилер |
</code> | </code> | ||
- | + | ||
- | Каждый подкласс наследует все свойства класса "Dog". По этой причине, если мы создадим образец Beagle (короткая Гончая), он получит все свойства из его родительского класса "Dog". | + | Каждый подкласс наследует все атрибуты класса Dog. Поэтому, если мы создадим экземпляр Beagle (бигль), он получит все атрибуты родительского класса Dog. |
<code> | <code> | ||
Beagle = Dog() | Beagle = Dog() | ||
- | Beagle.Name = 'Archie' | + | Beagle.Name = 'Арчи' |
- | Beagle.Height = 'Short' | + | Beagle.Height = 'Низкий' |
- | Beagle.Build = 'Chubby' | + | Beagle.Build = 'Пухлый' |
- | Beagle.Color = 'Brown' | + | Beagle.Color = 'Коричневый' |
</code> | </code> | ||
- | Стало понятней? Итак, давайте создадим наш класс "Dog" (см. ниже). Начнём его со слова "class" и имени нашего класса. | + | Становится понятнее? Итак, давайте создадим наш простой класс Dog (показан выше). Нач-нём с ключевого слова «class» и названия нашего класса. |
- | <code> | + | Перед тем, как углубиться в код, обратите внимание на функцию, которую мы здесь определили. Функция _init_ (два подчёркивания + init + два подчёркивания) — это инициализация, которая работает в любом классе. Она выполняется, как только мы вызываем в коде наш класс. В данном случае мы создали целый ряд параметров, устанавливающих основные сведения о нашем классе: кличка, окрас, рост, телосложение, настроение, возраст и состояния «голоен» и «утомлён» (переменные «Hungry» и «Tired» соответственно). Мы ещё вернёмся к ним. Теперь давайте добавим больше кода. |
- | class Dog(): | + | |
- | def __init__(self,dogname,dogcolor,dogheight,dogbuild,dogmood,dogage): | + | |
- | #here we setup the attributes of our dog | + | |
- | self.name = dogname | + | |
- | self.color = dogcolor | + | |
- | self.height = dogheight | + | |
- | self.build = dogbuild | + | |
- | self.mood = dogmood | + | |
- | self.age = dogage | + | |
- | self.Hungry = False | + | |
- | self.Tired = False | + | |
- | </code> | + | |
- | + | ||
- | Перед тем, как мы будем разбираться дальше в нашем коде, обратите внимание на функцию, которую мы объявили. Функция ''__init__'' (два знака подчёркивания + 'init' + два знака подчёркивания) - это функция инициализации, которая работает с любым классом. Как скоро мы вызовим наш класс в коде, настолько быстро он будет запущен. В этом случае, мы должны установить число параметров, чтобы записать некоторую основную информацию о нашем классе: name (имя), color (цвет), height (длина), build (сложение тела), mood (настроение), age (возраст), и пару переменных - Hungry (голодный) и Tired (усталый). Мы еще вернёмся к этому немного позже. Давайте добавим еще немного кода. | + | |
<code> | <code> | ||
- | Beagle = Dog('Archie','Brown','Short','Chubby','Grumpy',12) | + | Beagle = Dog('Арчи','Коричневый','Низкий','Пухлый','Сварливый',12) |
print Beagle.name | print Beagle.name | ||
print Beagle.color | print Beagle.color | ||
Строка 66: | Строка 55: | ||
</code> | </code> | ||
- | Этот код БЕЗ ОТСТУПОВ, который "проживает" вне класса, код, который использует наш класс. В первой строке создаёт образец нашего класса "Dog", названного как Beagle. Это называется созданием. Когда мы сделаем это, мы также получим прошедшую определённую информацию образца класса, например, имя Beagle, цвет, и другое. Следующие четыре строки просто запрашивают объект Beagle и получает обратно информацию в возвращении. Настало время более сложного кода! Добавьте код, показанный ниже в класс после функции ''__init__''. | + | Этот код БЕЗ отступов и находится он вне нашего класса, используя его. Первая строка создаёт экземпляр (Beagle) нашего класса Dog.* Это — инстанцирование, процесс создания экземпляра класса. Вслед за этим мы также пере-дали определённую информацию экземпляру нашего класса (кличка бигля, его окрас и тому подобное). Следующие четыре строки получают информацию об объекте Beagle. Вставьте в класс Dog (после функции _init_) код, расположенный в правом верхнем блоке. |
- | <code> | ||
- | def Eat(self): | ||
- | if self.Hungry: | ||
- | print 'Yum Yum...Num Num' | ||
- | self.Hungry = False | ||
- | else: | ||
- | print 'Sniff Sniff...Not Hungry' | ||
- | def Sleep(self): | ||
- | print 'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' | ||
- | self.Tired = False | ||
- | def Bark(self): | + | Теперь мы можем использовать Beagle.Eat() или Beagle. Sleep(). Давайте добавим ещё один метод. Мы назовём его Bark. Его код показан справа. |
- | if self.mood == 'Grumpy': | + | |
- | print 'GRRRRR...Woof Woof' | + | |
- | elif self.mood == 'Laid Back': | + | |
- | print 'Yawn...ok...Woof' | + | |
- | elif self.mood == 'Crazy': | + | |
- | print 'Bark Bark Bark Bark Bark Bark Bark' | + | |
- | else: | + | |
- | print 'Woof Woof' | + | |
- | </code> | + | |
- | Теперь мы можем вызвать это с помошью Beagle.Eat() или Beagle.Sleep(). Давайте добавим еще один метод. Назовём его Bark (лаять). Код показан выше. | + | Сделаем его более гибким: в зависимости от настроения собаки лай будет меняться. На следующей странице показан полный код класса на данный момент. |
- | Его я сделал более гибким. В зависимости от настроения собаки, вид лая будет меняться. Внизу статьи полный исходный код. | + | Итак, если запустить скрипт, то получим: |
- | Итак, после запуска мы получим: | + | Моя кличка Арчи\\ |
- | + | Мой окрас Коричневый\\ | |
- | <code> | + | Моё настроение Сварливый\\ |
- | My name is Archie | + | Я голоден = False\\ |
- | My color is Brown | + | Нюх-нюх... Не голоден\\ |
- | My mood is Grumpy | + | Ммм Ммм... Ням Ням\\ |
- | I am hungry = False | + | Рррррррр... Гав! Гав!\\ |
- | Sniff Sniff...Not Hungry | + | |
- | Yum Yum...Num Num | + | |
- | GRRRRR...Woof Woof | + | |
- | </code> | + | |
- | Теперь, это позаботится о сердитой старой Гончей. В любом случае, как я сказал ранее, у меня имеется 3 собаки. Давайте добавим более двух образцов нашего класса "Dog". | + | Что ж, мы позаботились о старом сварливом бигле. Однако, как я уже говорил, у меня три собаки. Так как класс мы написали продуманно, нам теперь осталось лишь создать ещё два экземпляра нашего класса. |
<code> | <code> | ||
- | Lab = Dog('Nina','Black','Medium',' Heavy','Laid Back',7) | + | Lab = Dog('Нина','Чёрный','Средний','Крепкий','Спокойный',7) |
- | Heeler = Dog('Bear','Black','Tall','Skinny','Crazy',9) | + | Heeler = Dog('Медведь','Чёрный','Высокий','Худой','Сумасшедший',9) |
- | print 'My Name is %s' % Lab.name | + | print 'Моя кличка %s' % Lab.name |
- | print 'My color is %s' % Lab.color | + | print 'Мой окрас %s' % Lab.color |
- | print 'My Mood is %s' % Lab.mood | + | print 'Моё настроение %s' % Lab.mood |
- | print 'I am hungry = %s' % Lab.Hungry | + | print 'Я голоден = %s' % Lab.Hungry |
- | Lab.Bark() Heeler.Bark() | + | Lab.Bark() |
+ | Heeler.Bark() | ||
</code> | </code> | ||
+ | Заметьте, я создал экземпляры для обеих собак ещё до инструкций вывода на экран. Это не проблема, так как я «определил» экземпляр, прежде чем вызывать какой-либо метод. Вот полный вывод нашей программы. | ||
- | Заметьте, я создал образцы обеих собак перед тем, как я выдал высказывания. Это не проблема с тех пор, как я “определил” образец собак, вызвав при этом любой из методов. Вот результат полной программы класса "Dog": | + | Моя кличка Арчи\\ |
+ | Мой окрас Коричневый\\ | ||
+ | Моё настроение Сварливый\\ | ||
+ | Я голоден = False\\ | ||
+ | Нюх-нюх... Не голоден\\ | ||
+ | Ммм Ммм... Ням Ням\\ | ||
+ | Рррррррр... Гав! Гав!\\ | ||
+ | Моя кличка Нина\\ | ||
+ | Мой окрас Чёрный\\ | ||
+ | Моё настроение Спокойный\\ | ||
+ | Я голоден = False\\ | ||
+ | Зевает...ok...Гав\\ | ||
+ | Ав Ав Ав Ав Ав Ав Ав Ав Ав Ав Ав Ав\\ | ||
- | <code> | + | Вы научились основам. В качестве домашнего задания расширьте класс Dog, чтобы он допускал большее количество методов, к примеру таких, как Play (играть), или Encounter StrangeDog (Повстречать НезнакомуюСобаку), или вроде того. |
- | My name is Archie | + | В следующий раз мы начнём обсуждать программирование GUI или Графического Интерфейса Пользователя. Для этого мы воспользуемся Boa Constructor. |
- | My color is Brown | + | |
- | My mood is Grumpy | + | |
- | I am hungry = False | + | |
- | Sniff Sniff...Not Hungry | + | |
- | Yum Yum...Num Num | + | |
- | GRRRRR...Woof Woof | + | |
- | My Name is Nina | + | |
- | My color is Black | + | |
- | My Mood is Laid Back | + | |
- | I am hungry = False | + | |
- | Yawn...ok...Woof | + | |
- | Bark Bark Bark Bark Bark | + | |
- | Bark Bark | + | |
- | </code> | + | |
- | + | ||
- | Теперь Вы поняли основу, Ваше домашнее задание будет расширить наш класс "Dog" и добавить еще несколько методов, например, играть (Play) или ВстречаПрохожейСобаки или что-нибудь вроде этого. | + | |
- | + | ||
- | В следующий раз мы начнём обсуждать программирование в Графическом Интерфейсе Пользователя (GUI). Для этого мы будем использовать программу Boa Constructor. | + | |
+ | =====Коды===== | ||
<code> | <code> | ||
class Dog(): | class Dog(): | ||
- | def __init__(self,dogname,dogcolor,dogheight,dogbuild,dogmood,dogage): #here we setup the attributes of our dog | + | def __init__(self,dogname,dogcolor,dogheight,dogbuild,dogmood,dogage): |
- | self.name = dogname | + | #здесь мы установим атрибуты для нашего класса «Собака» |
- | self.color = dogcolor | + | self.name = dogname |
- | self.height = dogheight | + | self.color = dogcolor |
- | self.build = dogbuild | + | self.height = dogheight |
- | self.mood = dogmood | + | self.build = dogbuild |
- | self.age = dogage | + | self.mood = dogmood |
- | self.Hungry = False | + | self.age = dogage |
- | self.Tired = False | + | self.Hungry = False |
- | + | self.Tired = False | |
- | def Eat(self): | + | |
- | if self.Hungry: | + | |
- | print 'Yum Yum...Num Num' | + | |
- | self.Hungry = False | + | |
- | else: | + | |
- | print 'Sniff Sniff...Not Hungry' | + | |
+ | def Eat(self): | ||
+ | if self.Hungry: | ||
+ | print 'Ммм Ммм...Ням Ням' | ||
+ | self.Hungry = False | ||
+ | else: | ||
+ | print 'Нюх-нюх...Не голоден' | ||
def Sleep(self): | def Sleep(self): | ||
- | print 'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' | + | if self.Tired: |
- | self.Tired = False | + | print 'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' |
+ | self.Tired = False | ||
def Bark(self): | def Bark(self): | ||
- | if self.mood == 'Grumpy': | + | if self.mood == 'Сварливый': |
- | print 'GRRRRR...Woof Woof' | + | print 'Рррррррр... Гав! Гав!' |
- | elif self.mood == 'Laid Back': | + | elif self.mood == 'Спокойный': |
- | print 'Yawn...ok...Woof' | + | print 'Зевает...ok...Гав' |
- | elif self.mood == 'Crazy': | + | elif self.mood == 'Сумасшедший': |
- | print 'Bark Bark Bark Bark Bark Bark Bark' | + | print 'Ав Ав Ав Ав Ав Ав Ав Ав Ав Ав Ав Ав' |
- | else: | + | else: |
- | print 'Woof Woof' | + | print 'Гав! Гав!' |
- | Beagle = Dog('Archie','Brown','Short','Chubby','Grumpy',12) | + | Beagle = Dog('Арчи','Коричневый','Низкий','Пухлый','Сварливый',12) |
- | print 'My name is %s' % Beagle.name | + | print 'Моя кличка %s' % Beagle.name |
- | print 'My color is %s' % Beagle.color | + | print 'Мой окрас %s' % Beagle.color |
- | print 'My mood is %s' % Beagle.mood | + | print 'Моё настроение %s' % Beagle.mood |
- | print 'I am hungry = %s' % Beagle.Hungry | + | print 'Я голоден = %s' % Beagle.Hungry |
+ | Beagle.Eat() | ||
+ | Beagle.Hungry = True | ||
Beagle.Eat() | Beagle.Eat() | ||
- | Beagle.Hungry = True | ||
- | Beagle.Eat() | ||
Beagle.Bark() | Beagle.Bark() | ||
</code> | </code> | ||
+ | |||
--------------------------------------- | --------------------------------------- | ||
<style center> | <style center> | ||
- | //[[..:31|К содержанию номера]]// | + | //[[..:30|К содержанию номера]]// |
//[[:fullcircle|К архиву журналов]]// | //[[:fullcircle|К архиву журналов]]// | ||
Строка 195: | Строка 160: | ||
{{tag>howto Full_Circle}} | {{tag>howto Full_Circle}} | ||
- |