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

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
fullcircle:30:python_ч_4 [2010/10/08 21:19]
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() или 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 (лаять)Код показан ​выше.+Сделаем его более гибкимв зависимости от настроения собаки лай будет менятьсяНа следующей странице ​показан ​полный код класса на данный момент.
  
-Его я сделал более гибким. В зависимости ​от настроения собаки, вид ​лая будет ​меняться.+Итак, если запустить скрипт, то получим:
  
-<​code>​ +Моя кличка Арчи\\ 
-class Dog(): +Мой окрас Коричневый\\ 
-    def __init__(self,​dogname,​dogcolor,​dogheight,​dogbuild,​dogmood,​dogage):​ +Моё настроение Сварливый\\ 
-        #here we setup the attributes of our dog +Я голоден ​False\\ 
-        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 'Yum Yum...Num Num'  +
-            self.Hungry = False +
-        else: +
-            print  '​Sniff ​ Sniff...Not ​ Hungry'​+
  
-    def Sleep(self):​ +<​code>​ 
-        print '​ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ'​  +Lab Dog('Нина','Чёрный','Средний','Крепкий','Спокойный',7) 
-        self.Tired ​False +Heeler ​= Dog('Медведь','​Чёрный','​Высокий','​Худой','​Сумасшедший',9
- +print 'Моя кличка ​%s' % Lab.name 
-    def Bark(self): +print 'Мой окрас ​%s' % Lab.color 
-        if self.mood == 'Grumpy'+print 'Моё настроение ​%s' % Lab.mood 
-            print 'GRRRRR...Woof Woof' +print 'Я голоден ​= %s' % Lab.Hungry 
-        elif self.mood == 'Laid Back':  +Lab.Bark() 
-            print 'Yawn...ok...Woof' +Heeler.Bark()
-        elif  self.mood ​ ==  ​'Crazy': +
-            print 'Bark Bark Bark Bark Bark Bark Bark'  +
-        else: +
-            print '​Woof ​ Woof'​ +
- +
-Beagle ​= Dog('Archie','​Brown','​Short','​Chubby','​Grumpy',12)  +
-print 'My name is %s' % Beagle.name +
-print 'My color is %s' % Beagle.color  +
-print 'My mood is %s' % Beagle.mood  +
-print 'I am hungry ​= %s' % Beagle.Hungry  +
-Beagle.Eat() +
-Beagle.Hungry = True  +
-Beagle.Eat()  +
-Beagle.Bark()+
 </​code>​ </​code>​
  
-Итакпосле запуска мы получим:+Заметьте, я создал экземпляры для ​обеих ​собак ​ещё до инструкций вывода на экран. Это не проблема,​ так ​как я «определил» экземпляр, прежде ​чем вызывать какой-либо метод. Вот полный вывод нашей программы.
  
-<​code>​ +Моя кличка Арчи\\ 
-My name is Archie +Мой окрас Коричневый\\ 
-My color is Brown +Моё настроение Сварливый\\ 
-My mood is Grumpy +Я голоден ​= False\\ 
-I am hungry ​= False +Нюх-нюх... Не голоден\\ 
-Sniff Sniff...Not Hungry +Ммм Ммм... Ням Ням\\ 
-Yum Yum...Num Num +Рррррррр... Гав! Гав!\\ 
-GRRRRR...Woof Woof +Моя кличка Нина\\ 
-</​code>​+Мой окрас Чёрный\\ 
 +Моё настроение Спокойный\\ 
 +Я голоден = False\\ 
 +Зевает...ok...Гав\\ 
 +Ав Ав Ав Ав Ав Ав Ав Ав Ав Ав Ав Ав\\
  
-Теперь, это позаботится о сердитой старой Гончей. В любом случае, как ​я сказал ранее, у меня имеется 3 собаки. Давайте добавим более двух ​образцов нашего ​класса "​Dog"​.+Вы научились основам. В качестве домашнего задания расширьте класс Dog, чтобы он допускал большее количество методов, к примеру таких, как Play (играть), или Encounter StrangeDog (Повстречать НезнакомуюСобаку), или вроде ​того. 
 +В следующий раз мы начнём ​обсуждать программирование GUI или Графического Интерфейса Пользователя. Для этого мы воспользуемся Boa Constructor.
  
 +=====Коды=====
 <​code>​ <​code>​
-Lab = Dog('​Nina','​Black','​Medium','​ Heavy','​Laid Back',​7+class Dog(): 
-Heeler = Dog('​Bear'​,'​Black'​,'​Tall'​,'​Skinny'​,'​Crazy'​,9+ def __init__(self,dogname,dogcolor,dogheight,dogbuild,dogmood,​dogage): 
-print 'My Name is %s' % Lab.name + #здесь мы установим атрибуты для нашего класса «Собака» 
-print 'My color is %s' % Lab.color + self.name = dogname 
-print 'My Mood is %s' % Lab.mood + self.color ​= dogcolor 
-print 'I am hungry ​%s' % Lab.Hungry + self.height = dogheight 
-Lab.Bark() + self.build ​dogbuild 
-Heeler.Bark() + self.mood = dogmood 
-</​code>​+ 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.Tired:
 + print '​ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ'​
 + self.Tired = False
  
-Заметьте,​ я создал образцы обеих собак перед тем, как я выдал высказыванияЭто не проблема с тех пор, как я “определил” образец собак, ​вызвав при этом любой из методов. Вот результат полной программы класса "​Dog":​+ def Bark(self):​ 
 + if self.mood == 'Сварливый': 
 + print '​Рррррррр... Гав! Гав!' 
 + elif self.mood == 'Спокойный':​ 
 + print 'Зевает...ok...Гав'​ 
 + elif self.mood == 'Сумасшедший': 
 + print 'Ав Ав Ав Ав Ав Ав Ав Ав Ав Ав Ав Ав'​ 
 + else: 
 + print 'Гав! Гав!'
  
-<​code>​ +Beagle = Dog('​Арчи','​Коричневый','​Низкий','​Пухлый','​Сварливый',​12) 
-My name is Archie +print '​Моя кличка %s' % Beagle.name 
-My color is Brown +print '​Мой окрас %s' % Beagle.color 
-My mood is Grumpy +print '​Моё настроение %s' % Beagle.mood 
-I am hungry ​False +print 'Я голоден ​%s' % Beagle.Hungry 
-Sniff Sniff...Not Hungry +Beagle.Eat() 
-Yum Yum...Num Num +Beagle.Hungry ​True 
-GRRRRR...Woof Woof +Beagle.Eat() 
-My Name is Nina +Beagle.Bark()
-My color is Black +
-My Mood is Laid Back +
-I am hungry ​False +
-Yawn...ok...Woof +
-Bark Bark Bark Bark Bark Bark Bark+
 </​code>​ </​code>​
  
-Теперь Вы поняли основу,​ Ваше домашнее задание будет расширить наш класс "​Dog"​ и добавить еще несколько методов,​ например,​ играть (Play) или ВстречаПрохожейСобаки или что-нибудь вроде этого. 
- 
-В следующий раз мы начнём обсуждать программирование в Графическом Интерфейсе Пользователя (GUI). Для этого мы будем использовать программу Boa Constructor. 
  
 --------------------------------------- ---------------------------------------
  
 <style center> <style center>
-//[[..:31|К содержанию номера]]//​+//[[..:30|К содержанию номера]]//​
  
 //​[[:​fullcircle|К архиву журналов]]//​ //​[[:​fullcircle|К архиву журналов]]//​
Строка 196: Строка 160:
  
 {{tag>​howto Full_Circle}} {{tag>​howto Full_Circle}}
-