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

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
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}}
-