Это старая версия документа.
Автор — Грэг Валтерс (Greg Walters)
В прошлый раз я обещал поговорить о классах. Давайте сконцентрируемся на этом. Что такое классы и чем они полезны?
Классы - это способ создания объектов. Объект - это простой способ обработки атрибутов и обращений как группа. Я знаю, сбивает с толку, я объясню это для Вас. Продумайте план работы. Объект - это способ моделирования чего-либо в реальной жизни. А класс - это способ для осущетвления этого. Например, у нас дома есть три собаки: короткая Гончая, Лабрадор и немецкая Овчарка. Все они собаки, но они разные. У них есть обычные отличительные черты среди их троих, но каждая собака имеет свою отличительную черту. Например, Гончая короткая, пухлая, коричневая, и раздражительная. Лабрадор средней длины, чёрная и очень спокойная. Овчарка длинная, тощая, чёрная, и немного бешеная. На первый взгляд, некоторые свойства очевидны. Коротка/средняя/длинный - это атрибуты роста. Раздражительная, спокойная, и бешеная - атрибуты характера. Зная эти данные, мы можем обдумать процессы питания, сна, игр, и других действий.
Они трое относяться к классу «Dog». Возвращаясь назад к свойствам, которые мы использовали для описания каждого, мы имеем Dog.Name (имя), Dog.Height (длина), Dog.Build (сложение тела - тощая, пухлая, и др.), and Dog.Color (цвет). Мы также имеем действия Dog.Bark (лаять), Dog.Eat (кушать), Dog.Sleep (спать).
Как я до этого сказал, каждая собака имеет собственную породу. Каждая порода будет подклассом в классе «Dog». На диаграмме это выглядит вот так:
/-- Beagle (короткая Гончая) Dog ---|--Lab (Лабрадор) \-- Shepherd/Heeler (немецкая Овчарка)
Каждый подкласс наследует все свойства класса «Dog». По этой причине, если мы создадим образец Beagle (короткая Гончая), он получит все свойства из его родительского класса «Dog».
Beagle = Dog() Beagle.Name = 'Archie' Beagle.Height = 'Short' Beagle.Build = 'Chubby' Beagle.Color = 'Brown'
Стало понятней? Итак, давайте создадим наш класс «Dog» (см. ниже). Начнём его со слова «class» и имени нашего класса.
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
Перед тем, как мы будем разбираться дальше в нашем коде, обратите внимание на функцию, которую мы объявили. Функция init
(два знака подчёркивания + 'init' + два знака подчёркивания) - это функция инициализации, которая работает с любым классом. Как скоро мы вызовим наш класс в коде, настолько быстро он будет запущен. В этом случае, мы должны установить число параметров, чтобы записать некоторую основную информацию о нашем классе: name (имя), color (цвет), height (длина), build (сложение тела), mood (настроение), age (возраст), и пару переменных - Hungry (голодный) и Tired (усталый). Мы еще вернёмся к этому немного позже. Давайте добавим еще немного кода.
Beagle = Dog('Archie','Brown','Short','Chubby','Grumpy',12) print Beagle.name print Beagle.color print Beagle.mood print Beagle.Hungry
Этот код БЕЗ ОТСТУПОВ, который «проживает» вне класса, код, который использует наш класс. В первой строке создаёт образец нашего класса «Dog», названного как Beagle. Это называется созданием. Когда мы сделаем это, мы также получим прошедшую определённую информацию образца класса, например, имя Beagle, цвет, и другое. Следующие четыре строки просто запрашивают объект Beagle и получает обратно информацию в возвращении. Настало время более сложного кода! Добавьте код, показанный ниже в класс после функции init
.
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): 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'
Теперь мы можем вызвать это с помошью Beagle.Eat() или Beagle.Sleep(). Давайте добавим еще один метод. Назовём его Bark (лаять). Код показан выше.
Его я сделал более гибким. В зависимости от настроения собаки, вид лая будет меняться. Внизу статьи полный исходный код.
Итак, после запуска мы получим:
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
Теперь, это позаботится о сердитой старой Гончей. В любом случае, как я сказал ранее, у меня имеется 3 собаки. Давайте добавим более двух образцов нашего класса «Dog».
Lab = Dog('Nina','Black','Medium',' Heavy','Laid Back',7) Heeler = Dog('Bear','Black','Tall','Skinny','Crazy',9) print 'My Name is %s' % Lab.name print 'My color is %s' % Lab.color print 'My Mood is %s' % Lab.mood print 'I am hungry = %s' % Lab.Hungry Lab.Bark() Heeler.Bark()
Заметьте, я создал образцы обеих собак перед тем, как я выдал высказывания. Это не проблема с тех пор, как я “определил” образец собак, вызвав при этом любой из методов. Вот результат полной программы класса «Dog»:
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 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
Теперь Вы поняли основу, Ваше домашнее задание будет расширить наш класс «Dog» и добавить еще несколько методов, например, играть (Play) или ВстречаПрохожейСобаки или что-нибудь вроде этого.
В следующий раз мы начнём обсуждать программирование в Графическом Интерфейсе Пользователя (GUI). Для этого мы будем использовать программу Boa Constructor.
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 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): 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' 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()