SlideShare a Scribd company logo
1 of 11
Download to read offline
ООП в Python
Иванов Сергей (317)
Практикум на ЭВМ
07.11.2016
Иванов Сергей (317) ООП в Python
Питон любит ООП
Python изначально задумывался
объектно-ориентированным языком
Всё есть объект (first-class object), а
значит, со всем можно работать по
одинаковым принципам
Иванов Сергей (317) ООП в Python
Питон любит лентяйничать
class SomeClass:
pass
С этим уже можно работать:
a = SomeClass()
b = SomeClass()
c = a #just reference
>>> a == b
False
>>> a == c
True
(!) Конструктор копирования за нас не сделают.
Пользуйтесь модулем copy
Иванов Сергей (317) ООП в Python
Питон любит атрибуты
Объектом являются как экземпляры класса, так и сам класс:
A.field = 179
>>> a.field
179
Кстати, у функций тоже есть атрибуты!
def f():
return 179
f.spanish_inquisition = "unexpected?"
Иванов Сергей (317) ООП в Python
Питон любит словари
Классы и экземпяры классов по внутреннему устройству похожи на
словари:
class Student:
pass
s = Student()
s.name = 'Sergey'
Student.fears = ['exams']
>>> Student.__dict__
mappingproxy({..., 'fears': ['exams']})
>>> s.__dict__
{'name': 'Sergey'}
Иванов Сергей (317) ООП в Python
Питон любит крякать
Питон следует принципам "утиной типизации"(Duck Typing):
"If it looks like a duck, swims like a duck and quacks like a duck, then it
probably is a duck."
def test(duck):
duck.swim()
duck.quack()
return "It is a duck!"
>> test(Human())
"It is a duck!"
Иванов Сергей (317) ООП в Python
Питон любит инкапсуляцию
x public свободный доступ
_x protected предостережение пользователям (!) от ис-
пользования вне производных классов
__x private атрибут невидим вне класса
Но если очень попросить, питон всё равно позволит:
class Student:
def __tellSecret(self):
print("I learn nothing")
Sergey = Student()
>>> Sergey._Student__tellSecret()
I learn nothing
Иванов Сергей (317) ООП в Python
Питон любит наследование
class CoolGuy:
pass
class Student:
def learn(self):
print("I am learning")
class Sergey(CoolGuy, Student):
pass
>>> S = Sergey()
>>> S.learn()
I am learning
Сначала питон пытается заставить учиться класс Sergey, потом -
CoolGuy, и только после этих двух досадных промахов - Student.
Иванов Сергей (317) ООП в Python
Питон любит магию
__init__(self, [...) конструктор - но он вызывается только когда
экземпляр объекта уже создан
__new__(cls, [...) процесс создания экземпляра (так называе-
мый классовый метод)
__del__(self) деструктор - но помните об автоматическом
сборщике мусора!
Всё это так называемые "магические методы"(magic methods)
Иванов Сергей (317) ООП в Python
Питон любит переопределять операторы!.. при
помощи магии
Арифметические операторы
Операторы сравнения
Унарные операции и функции (например, округление)
Операторы присваивания
Операторы преобразования типов
Операторы представления:
__str__(self) как выглядит объект в строковом представле-
нии
__hash__(self) целочисленный хэш объектов класса
__bool__(self) тру ли объект или фолс
И много чего ещё
Иванов Сергей (317) ООП в Python
Любите питон!
Иванов Сергей (317) ООП в Python

More Related Content

Viewers also liked

Mars CubeSat Telecom Relay Constellation_JPL Final
Mars CubeSat Telecom Relay Constellation_JPL FinalMars CubeSat Telecom Relay Constellation_JPL Final
Mars CubeSat Telecom Relay Constellation_JPL Final
Rohan Deshmukh
 

Viewers also liked (14)

Economics chapter7
Economics chapter7Economics chapter7
Economics chapter7
 
русалка
русалкарусалка
русалка
 
Farthest Neighbor Approach for Finding Initial Centroids in K- Means
Farthest Neighbor Approach for Finding Initial Centroids in K- MeansFarthest Neighbor Approach for Finding Initial Centroids in K- Means
Farthest Neighbor Approach for Finding Initial Centroids in K- Means
 
Живе мертве море
Живе мертве мореЖиве мертве море
Живе мертве море
 
CubeSat Poster
CubeSat PosterCubeSat Poster
CubeSat Poster
 
Quizzitch 2014 - Prelims
Quizzitch 2014 - PrelimsQuizzitch 2014 - Prelims
Quizzitch 2014 - Prelims
 
Tarea 3. Práctica web de la sesión 3 (#Tarea2MTA2016a)
Tarea 3. Práctica web de la sesión 3 (#Tarea2MTA2016a)Tarea 3. Práctica web de la sesión 3 (#Tarea2MTA2016a)
Tarea 3. Práctica web de la sesión 3 (#Tarea2MTA2016a)
 
Predictive Text Embedding using LINE
Predictive Text Embedding using LINEPredictive Text Embedding using LINE
Predictive Text Embedding using LINE
 
Mars CubeSat Telecom Relay Constellation_JPL Final
Mars CubeSat Telecom Relay Constellation_JPL FinalMars CubeSat Telecom Relay Constellation_JPL Final
Mars CubeSat Telecom Relay Constellation_JPL Final
 
НЭИКОН
НЭИКОННЭИКОН
НЭИКОН
 
Progress of Virtual Teams in Albania
Progress of Virtual Teams in AlbaniaProgress of Virtual Teams in Albania
Progress of Virtual Teams in Albania
 
Matrix Laboratory (эффективное программирование)
Matrix Laboratory (эффективное программирование)Matrix Laboratory (эффективное программирование)
Matrix Laboratory (эффективное программирование)
 
Space Quiz Finals
Space Quiz FinalsSpace Quiz Finals
Space Quiz Finals
 
Pandas: обзор основных функций
Pandas: обзор основных функцийPandas: обзор основных функций
Pandas: обзор основных функций
 

ООП в Python

  • 1. ООП в Python Иванов Сергей (317) Практикум на ЭВМ 07.11.2016 Иванов Сергей (317) ООП в Python
  • 2. Питон любит ООП Python изначально задумывался объектно-ориентированным языком Всё есть объект (first-class object), а значит, со всем можно работать по одинаковым принципам Иванов Сергей (317) ООП в Python
  • 3. Питон любит лентяйничать class SomeClass: pass С этим уже можно работать: a = SomeClass() b = SomeClass() c = a #just reference >>> a == b False >>> a == c True (!) Конструктор копирования за нас не сделают. Пользуйтесь модулем copy Иванов Сергей (317) ООП в Python
  • 4. Питон любит атрибуты Объектом являются как экземпляры класса, так и сам класс: A.field = 179 >>> a.field 179 Кстати, у функций тоже есть атрибуты! def f(): return 179 f.spanish_inquisition = "unexpected?" Иванов Сергей (317) ООП в Python
  • 5. Питон любит словари Классы и экземпяры классов по внутреннему устройству похожи на словари: class Student: pass s = Student() s.name = 'Sergey' Student.fears = ['exams'] >>> Student.__dict__ mappingproxy({..., 'fears': ['exams']}) >>> s.__dict__ {'name': 'Sergey'} Иванов Сергей (317) ООП в Python
  • 6. Питон любит крякать Питон следует принципам "утиной типизации"(Duck Typing): "If it looks like a duck, swims like a duck and quacks like a duck, then it probably is a duck." def test(duck): duck.swim() duck.quack() return "It is a duck!" >> test(Human()) "It is a duck!" Иванов Сергей (317) ООП в Python
  • 7. Питон любит инкапсуляцию x public свободный доступ _x protected предостережение пользователям (!) от ис- пользования вне производных классов __x private атрибут невидим вне класса Но если очень попросить, питон всё равно позволит: class Student: def __tellSecret(self): print("I learn nothing") Sergey = Student() >>> Sergey._Student__tellSecret() I learn nothing Иванов Сергей (317) ООП в Python
  • 8. Питон любит наследование class CoolGuy: pass class Student: def learn(self): print("I am learning") class Sergey(CoolGuy, Student): pass >>> S = Sergey() >>> S.learn() I am learning Сначала питон пытается заставить учиться класс Sergey, потом - CoolGuy, и только после этих двух досадных промахов - Student. Иванов Сергей (317) ООП в Python
  • 9. Питон любит магию __init__(self, [...) конструктор - но он вызывается только когда экземпляр объекта уже создан __new__(cls, [...) процесс создания экземпляра (так называе- мый классовый метод) __del__(self) деструктор - но помните об автоматическом сборщике мусора! Всё это так называемые "магические методы"(magic methods) Иванов Сергей (317) ООП в Python
  • 10. Питон любит переопределять операторы!.. при помощи магии Арифметические операторы Операторы сравнения Унарные операции и функции (например, округление) Операторы присваивания Операторы преобразования типов Операторы представления: __str__(self) как выглядит объект в строковом представле- нии __hash__(self) целочисленный хэш объектов класса __bool__(self) тру ли объект или фолс И много чего ещё Иванов Сергей (317) ООП в Python