Pythonlearn 14 Objects
Pythonlearn 14 Objects
Чарльз Северанс
Объект
Строка
Объекты
создаются и
используются Вывод
Ввод
Код/Данные
Код/Данные
Код/Данные
Код/Данные
Объекты —
биты кода и
данных Вывод
Ввод
Код/Данные
Код/Данные
Код/Данные
Код/Данные
Объекты скрывают
детали и позволяют
нам игнорировать
детали, относящиеся Вывод
к остальной части
программы
Ввод
Код/Данные
Код/Данные
Код/Данные
Код/Данные
Объекты скрывают
детали и позволяют
остальной части
программы
игнорировать детали Вывод
о «нас»
Определения
• Класс — это шаблон
• Метод или Сообщение — определенные
возможности класса
• Поле класса или Атрибут — данные внутри класса
• Объект или Экземпляр — конкретный экземпляр
класса
Терминология: Класс
Описывает абстрактные свойства объекта, включая
характеристики (атрибуты, поля или свойства), и поведение
объекта (то, что объект может делать или методы, операции и
дополнительные возможности). Можно сказать, что класс — это
шаблон, который описывает природу чего-либо. Например, класс
«Собака» будет содержать черты, присущие всем собакам, такие
как порода или цвет шерсти (характеристики), а также
способность лаять и сидеть (поведение).
https://ru.wikipedia.org/wiki/Объектно-ориентированное_программирование
Терминология: Экземпляр
def party(self) :
self.x = self.x + 1
print("Сейчас ",self.x)
an = PartyAnimal()
an.party()
an.party()
an.party()
class PartyAnimal:
$ python party1.py
x=0
def party(self) :
self.x = self.x + 1
print("Сейчас ",self.x)
an
x 0
an = PartyAnimal()
party()
an.party()
an.party()
an.party()
class PartyAnimal: $ python party1.py
x=0 Сейчас 1
Сейчас 2
def party(self) : Сейчас 3
self.x = self.x + 1
print("Сейчас ",self.x)
an
self x
an = PartyAnimal()
party()
an.party()
an.party()
an.party() PartyAnimal.party(an)
Забавы с dir() и type()
«Ботанский» способ нахождения возможностей
объекта
• Функция dir() возвращает список >>> y = list()
возможностей объекта >>> type(y)
<class 'list'>
• Игнорируйте те, что с подчеркиванием, >>> dir(y)
это специальные методы Пайтон ['__add__', '__class__', '__contains__',
'__delattr__', '__delitem__', '__delslice__',
• Операции, которые объект может '__doc__', … '__setitem__', '__setslice__',
производить '__str__', 'append', 'clear', 'copy', 'count',
'extend', 'index', 'insert', 'pop', 'remove',
• Похоже на функцию type(), которая 'reverse', 'sort']
сообщает нам некую *информацию* о >>>
переменной
class PartyAnimal:
x=0
Можем использовать dir(),
def party(self) : чтобы узнать «возможности»
self.x = self.x + 1 созданного нами класса.
print("Сейчас ",self.x)
an = PartyAnimal()
$ python party3.py
print("Тип ", type(an)) Тип <class '__main__.PartyAnimal'>
print("Dir ", dir(an)) Dir ['__class__', ... 'party', 'x']
Пробуем применить dir() к строке
def __del__(self):
print('Я уничтожен', self.x)
Использование конструктора и
an = PartyAnimal() деструктора не является
an.party() обязательным. Конструктор обычно
an.party()
an = 42 используется для настройки
print('an содержит',an) переменных.
Деструктор используется редко.
Конструктор
В объектно-ориентированном программировании
конструктор класса — это специальный блок
инструкций, вызываемый при создании объекта
https://ru.wikipedia.org/wiki/Конструктор_(объектно-
ориентированное_программирование)
Множество экземпляров
• Можно создать много объектов, класс — это шаблон для
объекта
s = PartyAnimal("Sally")
j = PartyAnimal("Jim")
s.party()
j.party()
s.party() party5.py
class PartyAnimal:
x=0
name = ""
def __init__(self, z):
self.name = z
print(self.name,"constructed")
def party(self) :
self.x = self.x + 1
print(self.name,"party count",self.x)
s = PartyAnimal("Sally")
j = PartyAnimal("Jim")
s.party()
j.party()
s.party()
class PartyAnimal:
x=0
name = "" s
def __init__(self, z): x: 0
self.name = z
print(self.name,"constructed")
name:
def party(self) :
self.x = self.x + 1
print(self.name,"party count",self.x)
s = PartyAnimal("Sally")
j = PartyAnimal("Jim")
s.party()
j.party()
s.party()
class PartyAnimal:
x=0
name = "" s
def __init__(self, z): x: 0
self.name = z
print(self.name,"constructed")
name: Sally
def party(self) :
self.x = self.x + 1
print(self.name,"party count",self.x)
s = PartyAnimal("Sally") j
j = PartyAnimal("Jim") x: 0
У нас есть два
s.party()
j.party()
независимых name: Jim
s.party() экземпляра
class PartyAnimal:
x=0
name = "" Sally constructed
def __init__(self, z): Jim constructed
self.name = z Sally party count 1
Jim party count 1
print(self.name,"constructed") Sally party count 2
def party(self) :
self.x = self.x + 1
print(self.name,"party count",self.x)
s = PartyAnimal("Sally")
j = PartyAnimal("Jim")
s.party()
j.party()
s.party()
Наследование
http://www.ibiblio.org/g2swap/byteofpython/read/inheritance.html
Наследование
• Создавая новый класс, мы можем использовать уже
существующий и унаследовать все возможности этого класса, а
затем добавить в наш новый класс что-нибудь еще
• Еще одна форма хранения и повторного использования
• Написав один раз, можно многократно использовать снова
• Новый класс (потомок) обладает всеми свойствами и методами
родительского класса (родитель), а затем, если необходимо, их
можно добавить или переопределить
Терминология: Наследование
https://ru.wikipedia.org/wiki/Объектно-ориентированное_программирование
class PartyAnimal:
x=0 s = PartyAnimal("Sally")
name = "" s.party()
def __init__(self, nam):
self.name = nam j = FootballFan("Jim")
print(self.name,"constructed") j.party()
j.touchdown()
def party(self) :
self.x = self.x + 1
print(self.name,"party count",self.x)
• Фотография из телесериала «Лесси». Лесси наблюдает как Джефф (Томми Реттиг) возится с
велосипедомDomain
https://en.wikipedia.org/wiki/Lassie#/media/File:Lassie_and_Tommy_Rettig_1956.JPG