HOW-TO: Программа на Python, Часть 4 Сравнение версий

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
fullcircle:30:python_ч_4 [2010/09/19 13:45]
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>​ +
-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 (усталый). Мы еще вернёмся к этому немного ​позже. Давайте добавим еще немного ​кода.+Перед тем, как углубиться в код, обратите внимание на функцию,​ которую мы здесь ​определили. Функция ​_init_ ​(два подчёркивания + init + два подчёркивания) ​— это инициализация, которая работает ​в любом классеОна выполняется, как только мы вызываем в коде наш класс. В данном случае мы создали целый ряд ​параметров, ​устанавливающих ​основные сведения о нашем классе: ​кличкаокрас, рост, телосложение,​ настроение,​ возраст и состояния «голоен» и «утомлён» (переменные «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() или BeagleSleep()Давайте добавим ещё один методМы назовём его 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 (лаять)Код показан ​выше.+Сделаем его более гибкимв зависимости от настроения собаки лай будет менятьсяНа следующей странице ​показан ​полный код класса на данный момент.
  
-Его я сделал более гибким. В зависимости от настроения собакивид лая будет меняться. Внизу статьи полный ​исходный код.+Итак, если запустить скрипт, то получим:
  
-Итак, после запуска мы получим:+Моя ​кличка Арчи\\ 
 +Мой окрас Коричневый\\ 
 +Моё настроение Сварливый\\ 
 +Я голоден = False\\ 
 +Нюх-нюх... Не голоден\\ 
 +Ммм Ммм... Ням Ням\\ 
 +Рррррррр... Гав! Гав!\\
  
-<​code>​ +Что ж, мы позаботились о старом сварливом бигле. Однако, как я уже говорил, у меня ​три собаки. ​Так как класс мы написали продуманно, нам теперь ​осталось лишь создать ​ещё два ​экземпляра ​нашего класса.
-My name is Archie +
-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):​ 
- def __init__(self,​dogname,​dogcolor,​dogheight,​dogbuild,​dogmood,​dogage):​ #here we setup the attributes of our dog + #здесь мы установим атрибуты для нашего класса «Собака» 
- self.name = dogname  + self.name = dogname 
- self.color = dogcolor  + self.color = dogcolor 
- self.height = dogheight  + self.height = dogheight 
- self.build = dogbuild  + self.build = dogbuild 
- self.mood = dogmood  + self.mood = dogmood 
- self.age = dogage  + self.age = dogage 
- self.Hungry = False + self.Hungry = False
  self.Tired = False  self.Tired = False
  
- def  Eat(self):​ + def Eat(self):​ 
- if  self.Hungry:​ + if self.Hungry:​ 
- print 'Yum Yum...Num Num' ​+ print 'Ммм Ммм...Ням Ням'
  self.Hungry = False  self.Hungry = False
  else:  else:
- print ​ 'Sniff  Sniff...Not  Hungry'+ print 'Нюх-нюх...Не голоден'  
 + def Sleep(self):​ 
 + if self.Tired:​ 
 + print '​ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ'​ 
 + self.Tired = False
  
- def  ​Sleep(self):​ + def Bark(self):​ 
- print '​ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ'​  + if self.mood == 'Сварливый': 
- self.Tired = False + print 'Рррррррр... Гав! Гав!
- + elif self.mood == 'Спокойный': 
- def  ​Bark(self):​ + print 'Зевает...ok...Гав
- if self.mood == 'Grumpy':  + elif self.mood == 'Сумасшедший': 
- print 'GRRRRR...Woof Woof+ print 'Ав Ав Ав Ав Ав Ав Ав Ав Ав Ав Ав Ав'
- elif self.mood == 'Laid Back':  +
- print 'Yawn...ok...Woof+
- elif ​ self.mood ​ ==  'Crazy': +
- print 'Bark Bark Bark Bark Bark Bark Bark' ​+
  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|К архиву журналов]]//​
Строка 196: Строка 160:
  
 {{tag>​howto Full_Circle}} {{tag>​howto Full_Circle}}
-