1.93M
Категория: ПрограммированиеПрограммирование

Программирование Python. Магические методы

1.

DS
Программирование
Python
Магические методы

2.

Введение
Тема
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

3.

Введение
Тема
На этом уроке:
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

4.

Введение
Тема
Познакомимся с понятием «Магический метод»
На этом уроке:
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

5.

Введение
Тема
Познакомимся с понятием «Магический метод»
Рассмотрим магический метод __new__()
На этом уроке:
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

6.

Введение
Тема
Познакомимся с понятием «Магический метод»
Рассмотрим магический метод __new__()
На этом уроке:
Поймем отличие метода __new__() от метода __init__().
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

7.

Введение
Тема
Познакомимся с понятием «Магический метод»
Рассмотрим магический метод __new__()
На этом уроке:
Поймем отличие метода __new__() от метода __init__().
Научимся использовать другие магические методы
для реализации классов.
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

8.

Введение
Тема
Что такое метод класса?
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

9.

Введение
Тема
Что такое метод класса?
Метод класса – это функция, позволяющая взаимодействовать со
свойствами класса.
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

10.

Введение
Тема
Что такое метод класса?
Метод класса – это функция, позволяющая взаимодействовать со
свойствами класса.
Для чего нужен параметр self?
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

11.

Введение
Тема
Что такое метод класса?
Метод класса – это функция, позволяющая взаимодействовать со
свойствами класса.
Для чего нужен параметр self?
self – параметр, передающийся первым при создании метода класса.
Он содержит в себе ссылку на объект, который вызывает метод.
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

12.

Введение
Тема
Что такое метод класса?
Метод класса – это функция, позволяющая взаимодействовать со
свойствами класса.
Для чего нужен параметр self?
self – параметр, передающийся первым при создании метода класса.
Он содержит в себе ссылку на объект, который вызывает метод.
Что такое атрибут __dict__?
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

13.

Введение
Тема
Что такое метод класса?
Метод класса – это функция, позволяющая взаимодействовать со
свойствами класса.
Для чего нужен параметр self?
self – параметр, передающийся первым при создании метода класса.
Он содержит в себе ссылку на объект, который вызывает метод.
Что такое атрибут __dict__?
__dict__ — это «магический» атрибут, возвращающий все локальные
атрибуты объекта
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

14.

Введение
Тема
Что такое метод класса?
Метод класса – это функция, позволяющая взаимодействовать со
свойствами класса.
Для чего нужен параметр self?
self – параметр, передающийся первым при создании метода класса.
Он содержит в себе ссылку на объект, который вызывает метод.
Что такое атрибут __dict__?
__dict__ — это «магический» атрибут, возвращающий все локальные
атрибуты объекта
Для чего нужен метод __init__()?
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

15.

Введение
Тема
Что такое метод класса?
Метод класса – это функция, позволяющая взаимодействовать со
свойствами класса.
Для чего нужен параметр self?
self – параметр, передающийся первым при создании метода класса.
Он содержит в себе ссылку на объект, который вызывает метод.
Что такое атрибут __dict__?
__dict__ — это «магический» атрибут, возвращающий все локальные
атрибуты объекта
Для чего нужен метод __init__()?
Метод __init__() нужен для создания инициализатора класса, внутри
которого можно задавать начальные свойства объекта класса
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

16.

Введение
Тема
Что такое метод класса?
Метод класса – это функция, позволяющая взаимодействовать со
свойствами класса.
Для чего нужен параметр self?
self – параметр, передающийся первым при создании метода класса.
Он содержит в себе ссылку на объект, который вызывает метод.
Что такое атрибут __dict__?
__dict__ — это «магический» атрибут, возвращающий все локальные
атрибуты объекта
Для чего нужен метод __init__()?
Метод __init__() нужен для создания инициализатора класса, внутри
которого можно задавать начальные свойства объекта класса
Для чего нужен метод __del__()?
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

17.

Введение
Тема
Что такое метод класса?
Метод класса – это функция, позволяющая взаимодействовать со
свойствами класса.
Для чего нужен параметр self?
self – параметр, передающийся первым при создании метода класса.
Он содержит в себе ссылку на объект, который вызывает метод.
Что такое атрибут __dict__?
__dict__ — это «магический» атрибут, возвращающий все локальные
атрибуты объекта
Для чего нужен метод __init__()?
Метод __init__() нужен для создания инициализатора класса, внутри
которого можно задавать начальные свойства объекта класса
Для чего нужен метод __del__()?
Метод __del__() нужен для создания финализатора класса, внутри
которого описываются действия, происходящие во время удаления
объекта
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

18.

Теория
Введение в магические методы
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

19.

Теория
Введение в магические методы
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

20.

Теория
Введение в магические методы
class Car:
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

21.

Теория
Введение в магические методы
class Car:
# инициализатор класса
def __init__():
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

22.

Теория
Введение в магические методы
class Car:
# инициализатор класса
def __init__(self, color, model, speed):
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

23.

Теория
Введение в магические методы
class Car:
# инициализатор класса
def __init__(self, color, model, speed):
self.color = color # цвет
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

24.

Теория
Введение в магические методы
class Car:
# инициализатор класса
def __init__(self, color, model, speed):
self.color = color # цвет
self.model = model # модель
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

25.

Теория
Введение в магические методы
class Car:
# инициализатор класса
def __init__(self, color, model, speed):
self.color = color # цвет
self.model = model # модель
self.speed = speed # скорость
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

26.

Теория
Введение в магические методы
class Car:
# инициализатор класса
def __init__(self, color, model, speed):
self.color = color # цвет
self.model = model # модель
self.speed = speed # скорость
# создаем объект класса Car
my_car = Car('Белый', 'Camry', 100)
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

27.

Теория
Введение в магические методы
class Car:
# инициализатор класса
def __init__(self, color, model, speed):
self.color = color # цвет
self.model = model # модель
self.speed = speed # скорость
# создаем объект класса Car
my_car = Car('Белый', 'Camry', 100)
print(my_car)
# выводим адрес объекта в терминал
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

28.

Теория
Введение в магические методы
class Car:
# инициализатор класса
def __init__(self, color, model, speed):
self.color = color # цвет
self.model = model # модель
self.speed = speed # скорость
# создаем объект класса Car
my_car = Car('Белый', 'Camry', 100)
print(my_car)
# выводим адрес объекта в терминал
>>> __main__.Car object at 0x000001EE2B94EA10>
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

29.

Теория
Введение в магические методы
class Car:
# инициализатор класса
def __init__(self, color, model, speed):
self.color = color # цвет
self.model = model # модель
self.speed = speed # скорость
# создаем объект класса Car
my_car = Car('Белый', 'Camry', 100)
print(my_car)
# выводим адрес объекта в терминал
print(my_car.__dict__) # получаем локальные свойства объекта
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

30.

Теория
Введение в магические методы
class Car:
# инициализатор класса
def __init__(self, color, model, speed):
self.color = color # цвет
self.model = model # модель
self.speed = speed # скорость
# создаем объект класса Car
my_car = Car('Белый', 'Camry', 100)
print(my_car)
# выводим адрес объекта в терминал
print(my_car.__dict__) # получаем локальные свойства объекта
>>> {'color': 'Белый', 'model': 'Camry', 'speed': 100}
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

31.

Теория
Введение в магические методы
Магические методы – специальные методы, добавляющие
определенную функциональность для объектов класса.
Названия таких методов всегда начинаются и заканчиваются
с двух нижних подчеркиваний. Например, __init__().
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

32.

Теория
Введение в магические методы
Магические методы – специальные методы, добавляющие
определенную функциональность для объектов класса.
Названия таких методов всегда начинаются и заканчиваются
с двух нижних подчеркиваний. Например, __init__().
Магические методы вызываются автоматически в
определенной ситуации.
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

33.

Теория
Метод __new__()
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

34.

Теория
Метод __new__()
Конструирование любого объекта класса состоит из двух следующих этапов:
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

35.

Теория
Метод __new__()
Конструирование любого объекта класса состоит из двух следующих этапов:
1
Создание нового экземпляра класса
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

36.

Теория
Метод __new__()
Конструирование любого объекта класса состоит из двух следующих этапов:
1
Создание нового экземпляра класса
2
Инициализация созданного объекта
класса
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

37.

Теория
Метод __new__()
__new__() – магический метод, вызывающийся до метода __init__()
и отвечающий за создание нового экземпляра класса.
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

38.

Теория
Метод __new__()
__new__() – магический метод, вызывающийся до метода __init__()
__init__()
и отвечающий
за создание
нового экземпляра
и
отвечающий
за создание
нового экземпляра
класса. класса.
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

39.

Теория
Метод __new__()
class Car:
def __new__():
def __init__(self, color, model, speed):
self.color = color # цвет
self.model = model # модель
self.speed = speed # скорость
# создаем объект класса Car
my_car = Car('Белый', 'Camry', 100)
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

40.

Теория
Метод __new__()
class Car:
def __new__(cls):
def __init__(self, color, model, speed):
self.color = color # цвет
self.model = model # модель
self.speed = speed # скорость
# создаем объект класса Car
my_car = Car('Белый', 'Camry', 100)
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

41.

Теория
Метод __new__()
class Car:
def __new__(cls):
def __init__(self, color, model, speed):
self.color = color # цвет
self.model
= model
# модель
cls – обязательный
первый параметр
в методе
__new__(), ссылающийся на текущий
self.speed = speed # скорость
класс.
# создаем объект класса Car
my_car = Car('Белый', 'Camry', 100)
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

42.

Теория
Метод __new__()
class Car:
def __new__(cls):
def __init__(self, color, model, speed):
self.color = color # цвет
self.model = model # модель
self.speed = speed # скорость
# создаем объект класса Car
my_car = Car('Белый', 'Camry', 100)
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

43.

Теория
Метод __new__()
class Car:
def __new__(cls, color, model, speed):
def __init__(self, color, model, speed):
self.color = color # цвет
self.model = model # модель
self.speed = speed # скорость
# создаем объект класса Car
my_car = Car('Белый', 'Camry', 100)
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

44.

Теория
Метод __new__()
class Car:
def __new__(cls, color, model, speed):
print(f'Работает метод __new__() для класса {cls}')
def __init__(self, color, model, speed):
self.color = color # цвет
self.model = model # модель
self.speed = speed # скорость
# создаем объект класса Car
my_car = Car('Белый', 'Camry', 100)
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

45.

Теория
Метод __new__()
class Car:
def __new__(cls, color, model, speed):
print(f'Работает метод __new__() для класса {cls}')
def __init__(self, color, model, speed):
self.color = color # цвет
self.model = model # модель
self.speed = speed # скорость
# создаем объект класса Car
my_car = Car('Белый', 'Camry', 100)
print(my_car)
# выводим адрес объекта в терминал
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

46.

Теория
Метод __new__()
class Car:
def __new__(cls, color, model, speed):
print(f'Работает метод __new__() для класса {cls}')
def __init__(self, color, model, speed):
self.color = color # цвет
self.model = model # модель
self.speed = speed # скорость
# создаем объект класса Car
my_car = Car('Белый', 'Camry', 100)
print(my_car)
# выводим адрес объекта в терминал
>>> Работает метод __new__() для класса <class '__main__.Car'>
None
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

47.

Теория
Метод __new__()
class Car:
def __new__(cls, color, model, speed):
print(f'Работает метод __new__() для класса {cls}')
return
def __init__(self, color, model, speed):
self.color = color # цвет
self.model = model # модель
self.speed = speed # скорость
# создаем объект класса Car
my_car = Car('Белый', 'Camry', 100)
print(my_car)
# выводим адрес объекта в терминал
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

48.

Теория
Метод __new__()
class Car:
def __new__(cls, color, model, speed):
print(f'Работает метод __new__() для класса {cls}')
# возвращаем новый, неинициализированный объект
return super().__new__(cls)
def __init__(self, color, model, speed):
self.color = color # цвет
self.model = model # модель
self.speed = speed # скорость
# создаем объект класса Car
my_car = Car('Белый', 'Camry', 100)
print(my_car)
# выводим адрес объекта в терминал
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

49.

Теория
Метод __new__()
class Car:
def __new__(cls, color, model, speed):
print(f'Работает метод __new__() для класса {cls}')
return super().__new__(cls)
def __init__(self, color, model, speed):
self.color
color #к методам
цвет
super() – функция,
позволяющая=обращаться
«базового» класса и
self.modelработу
= model
модель
реализовывать полноценную
метода#__new__().
self.speed = speed # скорость
# создаем объект класса Car
my_car = Car('Белый', 'Camry', 100)
print(my_car)
# выводим адрес объекта в терминал
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

50.

Теория
Метод __new__()
class Car:
def __new__(cls, color, model, speed):
print(f'Работает метод __new__() для класса {cls}')
# возвращаем новый, неинициализированный объект
return super().__new__(cls)
def __init__(self, color, model, speed):
self.color = color # цвет
self.model = model # модель
self.speed = speed # скорость
# создаем объект класса Car
my_car = Car('Белый', 'Camry', 100)
print(my_car)
# выводим адрес объекта в терминал
>>> Работает метод __new__() для класса <class '__main__.Car'>
<__main__.Car object at 0x000001C11F56A4D0>
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

51.

Теория
Метод __new__()
class Car:
def __new__(cls, *args):
print(f'Работает метод __new__() для класса {cls}')
# возвращаем новый, неинициализированный объект
return super().__new__(cls)
def __init__(self, color, model, speed):
self.color = color # цвет
self.model = model # модель
self.speed = speed # скорость
# создаем объект класса Car
my_car = Car('Белый', 'Camry', 100)
print(my_car)
# выводим адрес объекта в терминал
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

52.

Теория
Метод __new__()
class Car:
def __new__(cls, *args):
print(f'Работает метод __new__() для класса {cls}')
print(args)
# возвращаем новый, неинициализированный объект
return super().__new__(cls)
def __init__(self, color, model, speed):
self.color = color # цвет
self.model = model # модель
self.speed = speed # скорость
# создаем объект класса Car
my_car = Car('Белый', 'Camry', 100)
print(my_car)
# выводим адрес объекта в терминал
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

53.

Теория
Метод __new__()
class Car:
def __new__(cls, *args):
print(f'Работает метод __new__() для класса {cls}')
print(args)
# возвращаем новый, неинициализированный объект
return super().__new__(cls)
def __init__(self, color, model, speed):
self.color = color # цвет
self.model = model # модель
self.speed = speed # скорость
# создаем объект класса Car
my_car = Car('Белый', 'Camry', 100)
print(my_car)
# выводим адрес объекта в терминал
>>> ('Белый', 'Camry', 100)
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

54.

Теория
Метод __new__()
class Car:
def __new__(cls, *args):
print(f'Работает метод __new__() для класса {cls}')
print(args)
return super().__new__(cls)
def __init__(self,
color, model,
speed):
*args (arguments)
– конструкция, позволяющая
обрабатывать
любое количество
= color
# цвет
неименованныхself.color
аргументов. Является
кортежем.
self.model = model # модель
self.speed = speed # скорость
# создаем объект класса Car
my_car = Car('Белый', 'Camry', 100)
print(my_car)
# выводим адрес объекта в терминал
>>> ('Белый', 'Camry', 100)
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

55.

Теория
Метод __new__()
class Car:
def __new__(cls, *args):
print(f'Работает метод __new__() для класса {cls}')
print(args)
# возвращаем новый, неинициализированный объект
return super().__new__(cls)
def __init__(self, color, model, speed):
self.color = color # цвет
self.model = model # модель
self.speed = speed # скорость
# создаем объект класса Car
my_car = Car('Белый', 'Camry', 100)
# создаем объект класса Car с именованными аргументами
my_car = Car(color='Белый', model='Camry', speed=100)
print(my_car)
# выводим адрес объекта в терминал
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

56.

Теория
Метод __new__()
class Car:
def __new__(cls, *args):
print(f'Работает метод __new__() для класса {cls}')
print(args)
# возвращаем новый, неинициализированный объект
return super().__new__(cls)
def __init__(self, color, model, speed):
self.color = color # цвет
self.model = model # модель
self.speed = speed # скорость
# создаем объект класса Car
my_car = Car('Белый', 'Camry', 100)
# создаем объект класса Car с именованными аргументами
my_car = Car(color='Белый', model='Camry', speed=100)
print(my_car)
# выводим адрес объекта в терминал
>>> TypeError: Car.__new__() got an unexpected keyword
argument 'color'
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

57.

Теория
Метод __new__()
class Car:
def __new__(cls, *args, **kwargs):
print(f'Работает метод __new__() для класса {cls}')
print(args)
print(kwargs)
# возвращаем новый, неинициализированный объект
return super().__new__(cls)
def __init__(self, color, model, speed):
self.color = color # цвет
self.model = model # модель
self.speed = speed # скорость
# создаем объект класса Car
my_car = Car('Белый', 'Camry', 100)
# создаем объект класса Car с именованными аргументами
my_car = Car(color='Белый', model='Camry', speed=100)
print(my_car)
# выводим адрес объекта в терминал
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

58.

Теория
Метод __new__()
class Car:
def __new__(cls, *args, **kwargs):
print(f'Работает метод __new__() для класса {cls}')
print(args)
print(kwargs)
# возвращаем новый, неинициализированный объект
return super().__new__(cls)
def __init__(self, color, model, speed):
self.color = color # цвет
self.model = model # модель
self.speed = speed # скорость
# создаем объект класса Car
my_car = Car('Белый', 'Camry', 100)
# создаем объект класса Car с именованными аргументами
my_car = Car(color='Белый', model='Camry', speed=100)
print(my_car)
# выводим адрес объекта в терминал
>>> {'color': 'Белый', 'model': 'Camry', 'speed': 100}
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

59.

Теория
Метод __new__()
class Car:
def __new__(cls, *args, **kwargs):
print(f'Работает метод __new__() для класса {cls}')
print(args)
print(kwargs)
**kwargs (keyword
arguments) – конструкция, позволяющая обрабатывать любое
return super().__new__(cls)
количество именованных
аргументов. Является словарем.
def __init__(self, color, model, speed):
self.color = color # цвет
self.model = model # модель
self.speed = speed # скорость
# создаем объект класса Car
my_car = Car('Белый', 'Camry', 100)
# создаем объект класса Car с именованными аргументами
my_car = Car(color='Белый', model='Camry', speed=100)
print(my_car)
# выводим адрес объекта в терминал
>>> {'color': 'Белый', 'model': 'Camry', 'speed': 100}
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

60.

Теория
Метод __new__()
class Car:
def __new__(cls, *args, **kwargs):
print(f'Работает метод __new__() для класса {cls}')
print(args)
print(kwargs)
**kwargs (keyword
arguments) – конструкция, позволяющая обрабатывать любое
return super().__new__(cls)
количество именованных
аргументов. Является словарем.
def __init__(self, color, model, speed):
self.color = color # цвет
self.model
model # модель
def __new__(cls,
*args,= **kwargs):
- универсальный шаблон для
= speed # скорость
создания методаself.speed
__new__() в классе.
# создаем объект класса Car
my_car = Car('Белый', 'Camry', 100)
# создаем объект класса Car с именованными аргументами
my_car = Car(color='Белый', model='Camry', speed=100)
print(my_car)
# выводим адрес объекта в терминал
>>> {'color': 'Белый', 'model': 'Camry', 'speed': 100}
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

61.

Теория
Метод __new__()
class Car:
def __new__(cls, *args, **kwargs):
print(f'Работает метод __new__() для класса {cls}')
print(args)
print(kwargs)
# возвращаем новый, неинициализированный объект
return super().__new__(cls)
# инициализатор класса
def __init__(self, color, model, speed):
self.color = color # цвет
self.model = model # модель
self.speed = speed # скорость
# создаем объект класса Car
my_car = Car('Белый', 'Camry', 100)
# создаем объект класса Car с именованными аргументами
my_car = Car(color='Белый', model='Camry', speed=100)
print(my_car)
# выводим адрес объекта в терминал
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

62.

Теория
Шаблон проектирования Singleton
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

63.

Задание №
1
Реализуйте класс Captain, внутри которого должны быть описаны следующие свойства:
name (строка) – имя
age (целое число) - возраст
height (целое число) - рост (см.)
weight (целое число) - масса (кг.)
Также должны быть реализованы следующие методы:
__init__() – инициализация объекта с начальными значениями свойств
__new__() – создание нового объекта класса
Класс должны быть реализован так, чтобы в программе всегда присутствовал только один
экземпляр класса Captain.
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

64.

65.

class Captain:

66.

class Captain:
# инициализатор класса
def __init__(self, name, age, height, weight):

67.

class Captain:
# инициализатор класса
def __init__(self, name, age, height, weight):
self.name = name
# имя

68.

class Captain:
# инициализатор класса
def __init__(self, name, age, height, weight):
self.name = name
# имя
self.age = age
# возраст

69.

class Captain:
# инициализатор класса
def __init__(self, name, age, height, weight):
self.name = name
# имя
self.age = age
# возраст
self.height = height
# рост

70.

class Captain:
# инициализатор класса
def __init__(self, name, age, height, weight):
self.name = name
# имя
self.age = age
# возраст
self.height = height
# рост
self.weight = weight
# масса

71.

class Captain:
def __new__(cls, *args, **kwargs):
# инициализатор класса
def __init__(self, name, age, height, weight):
self.name = name
# имя
self.age = age
# возраст
self.height = height
# рост
self.weight = weight
# масса

72.

class Captain:
__cap = None
# ссылка на экземпляр класса Captain
def __new__(cls, *args, **kwargs):
if cls.__cap is None: # если объекта класса Captain еще нет в программе
# инициализатор класса
def __init__(self, name, age, height, weight):
self.name = name
# имя
self.age = age
# возраст
self.height = height
# рост
self.weight = weight
# масса

73.

class Captain:
__cap = None
# ссылка на экземпляр класса Captain
def __new__(cls, *args, **kwargs):
if cls.__cap is None: # если объекта класса Captain еще нет в программе
# инициализатор класса
def __init__(self, name, age, height, weight):
self.name = name
# имя
self.age = age
# возраст
self.height = height
# рост
self.weight = weight
# масса
is – оператор, возвращающий True, если объекты указывают на один и тот же адрес в
оперативной памяти. В противном случае возвращает False.

74.

class Captain:
__cap = None
# ссылка на экземпляр класса Captain
def __new__(cls, *args, **kwargs):
if cls.__cap is None: # если объекта класса Captain еще нет в программе
cls.__cap = super().__new__(cls) # создаем объект класса Captain
# инициализатор класса
def __init__(self, name, age, height, weight):
self.name = name
# имя
self.age = age
# возраст
self.height = height
# рост
self.weight = weight
# масса

75.

class Captain:
__cap = None
# ссылка на экземпляр класса Captain
# метод __new__(), итоговая версия
def __new__(cls, *args, **kwargs):
if cls.__cap is None: # если объекта класса Captain еще нет в программе
cls.__cap = super().__new__(cls) # создаем объект класса Captain
return cls.__cap
# возвращаем созданный объект
# инициализатор класса
def __init__(self, name, age, height, weight):
self.name = name
# имя
self.age = age
# возраст
self.height = height
# рост
self.weight = weight
# масса

76.

class Captain:
__cap = None
# ссылка на экземпляр класса Captain
# метод __new__(), итоговая версия
def __new__(cls, *args, **kwargs):
if cls.__cap is None: # если объекта класса Captain еще нет в программе
cls.__cap = super().__new__(cls) # создаем объект класса Captain
return cls.__cap
# возвращаем созданный объект
# инициализатор класса
def __init__(self, name, age, height, weight):
self.name = name
# имя
self.age = age
# возраст
self.height = height
# рост
self.weight = weight
# масса
# создаем экземпляр класса Captain
cap = Captain(name='Дима', age=26, height=179, weight=75)

77.

class Captain:
__cap = None
# ссылка на экземпляр класса Captain
# метод __new__(), итоговая версия
def __new__(cls, *args, **kwargs):
if cls.__cap is None: # если объекта класса Captain еще нет в программе
cls.__cap = super().__new__(cls) # создаем объект класса Captain
return cls.__cap
# возвращаем созданный объект
# инициализатор класса
def __init__(self, name, age, height, weight):
self.name = name
# имя
self.age = age
# возраст
self.height = height
# рост
self.weight = weight
# масса
# создаем экземпляр класса Captain
cap = Captain(name='Дима', age=26, height=179, weight=75)
# пытаемся создать новый экземпляр класса Captain
new_cap = Captain(name='Миша', age=25, height=189, weight=82)

78.

class Captain:
__cap = None
# ссылка на экземпляр класса Captain
# метод __new__(), итоговая версия
def __new__(cls, *args, **kwargs):
if cls.__cap is None: # если объекта класса Captain еще нет в программе
cls.__cap = super().__new__(cls) # создаем объект класса Captain
return cls.__cap
# возвращаем созданный объект
# инициализатор класса
def __init__(self, name, age, height, weight):
self.name = name
# имя
self.age = age
# возраст
self.height = height
# рост
self.weight = weight
# масса
# создаем экземпляр класса Captain
cap = Captain(name='Дима', age=26, height=179, weight=75)
# пытаемся создать новый экземпляр класса Captain
new_cap = Captain(name='Миша', age=25, height=189, weight=82)
# выводим адреса созданных объектов на экран (они совпадают)
print(cap)

79.

class Captain:
__cap = None
# ссылка на экземпляр класса Captain
# метод __new__(), итоговая версия
def __new__(cls, *args, **kwargs):
if cls.__cap is None: # если объекта класса Captain еще нет в программе
cls.__cap = super().__new__(cls) # создаем объект класса Captain
return cls.__cap
# возвращаем созданный объект
# инициализатор класса
def __init__(self, name, age, height, weight):
self.name = name
# имя
self.age = age
# возраст
self.height = height
# рост
self.weight = weight
# масса
# создаем экземпляр класса Captain
cap = Captain(name='Дима', age=26, height=179, weight=75)
# пытаемся создать новый экземпляр класса Captain
new_cap = Captain(name='Миша', age=25, height=189, weight=82)
# выводим адреса созданных объектов на экран (они совпадают)
print(cap)
print(new_cap)

80.

class Captain:
__cap = None
# ссылка на экземпляр класса Captain
# метод __new__(), итоговая версия
def __new__(cls, *args, **kwargs):
if cls.__cap is None: # если объекта класса Captain еще нет в программе
cls.__cap = super().__new__(cls) # создаем объект класса Captain
return cls.__cap
# возвращаем созданный объект
# инициализатор класса
def __init__(self, name, age, height, weight):
self.name = name
# имя
self.age = age
# возраст
self.height = height
# рост
self.weight = weight
# масса
# создаем экземпляр класса Captain
cap = Captain(name='Дима', age=26, height=179, weight=75)
# пытаемся создать новый экземпляр класса Captain
new_cap = Captain(name='Миша', age=25, height=189, weight=82)
# выводим адреса созданных объектов на экран (они совпадают)
print(cap)
print(new_cap)
>>> <__main__.Captain object at 0x000001AEC878ADD0>
<__main__.Captain object at 0x000001AEC878ADD0>

81.

class Captain:
__cap = None
# ссылка на экземпляр класса Captain
# метод __new__(), итоговая версия
def __new__(cls, *args, **kwargs):
if cls.__cap is None: # если объекта класса Captain еще нет в программе
cls.__cap = super().__new__(cls) # создаем объект класса Captain
return cls.__cap
# возвращаем созданный объект
# инициализатор класса
def __init__(self, name, age, height, weight):
self.name = name
# имя
self.age = age
# возраст
self.height = height
# рост
self.weight = weight
# масса
# создаем экземпляр класса Captain
cap = Captain(name='Дима', age=26, height=179, weight=75)
# пытаемся создать новый экземпляр класса Captain
new_cap = Captain(name='Миша', age=25, height=189, weight=82)
# выводим адреса созданных объектов на экран (они совпадают)
print(cap)
print(new_cap)
# выводим локальные свойства созданных объектов на экран (они совпадают)
print(cap.__dict__)

82.

class Captain:
__cap = None
# ссылка на экземпляр класса Captain
# метод __new__(), итоговая версия
def __new__(cls, *args, **kwargs):
if cls.__cap is None: # если объекта класса Captain еще нет в программе
cls.__cap = super().__new__(cls) # создаем объект класса Captain
return cls.__cap
# возвращаем созданный объект
# инициализатор класса
def __init__(self, name, age, height, weight):
self.name = name
# имя
self.age = age
# возраст
self.height = height
# рост
self.weight = weight
# масса
# создаем экземпляр класса Captain
cap = Captain(name='Дима', age=26, height=179, weight=75)
# пытаемся создать новый экземпляр класса Captain
new_cap = Captain(name='Миша', age=25, height=189, weight=82)
# выводим адреса созданных объектов на экран (они совпадают)
print(cap)
print(new_cap)
# выводим локальные свойства созданных объектов на экран (они совпадают)
print(cap.__dict__)
print(new_cap.__dict__)

83.

class Captain:
__cap = None
# ссылка на экземпляр класса Captain
# метод __new__(), итоговая версия
def __new__(cls, *args, **kwargs):
if cls.__cap is None: # если объекта класса Captain еще нет в программе
cls.__cap = super().__new__(cls) # создаем объект класса Captain
return cls.__cap
# возвращаем созданный объект
# инициализатор класса
def __init__(self, name, age, height, weight):
self.name = name
# имя
>>> {'name':
'Миша',
'height': 189, 'weight': 82}
self.age
= age 'age': 25,
# возраст
self.height = height
# рост
{'name':
'Миша',
'age':
25,
'height': 189, 'weight': 82}
self.weight = weight
# масса
# создаем экземпляр класса Captain
cap = Captain(name='Дима', age=26, height=179, weight=75)
# пытаемся создать новый экземпляр класса Captain
new_cap = Captain(name='Миша', age=25, height=189, weight=82)
# выводим адреса созданных объектов на экран (они совпадают)
print(cap)
print(new_cap)
# выводим локальные свойства созданных объектов на экран (они совпадают)
print(cap.__dict__)
print(new_cap.__dict__)

84.

class Captain:
__cap = None
# ссылка на экземпляр класса Captain
# метод __new__(), итоговая версия
def __new__(cls, *args, **kwargs):
if cls.__cap is None: # если объекта класса Captain еще нет в программе
cls.__cap = super().__new__(cls) # создаем объект класса Captain
return cls.__cap
# возвращаем созданный объект
# инициализатор класса
def __init__(self, name, age, height, weight):
self.name = name
# имя
self.age = age
# возраст
self.height = height
# рост
self.weight = weight
# масса
# создаем экземпляр класса Captain
cap = Captain(name='Дима', age=26, height=179, weight=75)
# пытаемся создать новый экземпляр класса Captain
new_cap = Captain(name='Миша', age=25, height=189, weight=82)
# выводим адреса созданных объектов на экран (они совпадают)
print(cap)
print(new_cap)
# выводим локальные свойства созданных объектов на экран (они совпадают)
print(cap.__dict__)
print(new_cap.__dict__)

85.

class Captain:
__cap = None
# ссылка на экземпляр класса Captain
# метод __new__(), итоговая версия
def __new__(cls, *args, **kwargs):
if cls.__cap is None: # если объекта класса Captain еще нет в программе
cls.__cap = super().__new__(cls) # создаем объект класса Captain
return cls.__cap
# возвращаем созданный объект
# инициализатор класса
def __init__(self, name, age, height, weight):
self.name = name
# имя
Singleton – шаблон
проектирования,
гарантирующий,
что для указанного класса будет
self.age = age
# возраст
создан только
один экземпляр.
self.height
= height
# рост
self.weight = weight
# масса
# создаем экземпляр класса Captain
cap = Captain(name='Дима', age=26, height=179, weight=75)
# пытаемся создать новый экземпляр класса Captain
new_cap = Captain(name='Миша', age=25, height=189, weight=82)
# выводим адреса созданных объектов на экран (они совпадают)
print(cap)
print(new_cap)
# выводим локальные свойства созданных объектов на экран (они совпадают)
print(cap.__dict__)
print(new_cap.__dict__)

86.

Теория
Методы __str__() и __repr__()
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

87.

Теория
Методы __str__() и __repr__()
class Car:
# инициализатор класса
def __init__(self, model):
self.model = model # модель
my_car = Car('Camry') # создаем объект класса Car
print(my_car) # выводим информацию об объекте в терминал
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

88.

Теория
Методы __str__() и __repr__()
class Car:
# инициализатор класса
def __init__(self, model):
self.model = model # модель
def __str__(self):
my_car = Car('Camry') # создаем объект класса Car
print(my_car) # выводим информацию об объекте в терминал
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

89.

Теория
Методы __str__() и __repr__()
class Car:
# инициализатор класса
def __init__(self, model):
self.model = model # модель
def __str__(self):
return f'Модель машины - {self.model}'
my_car = Car('Camry') # создаем объект класса Car
print(my_car) # выводим информацию об объекте в терминал
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

90.

Теория
Методы __str__() и __repr__()
class Car:
# инициализатор класса
def __init__(self, model):
self.model = model # модель
# отображения информации об объекте в понятном для пользователя виде
def __str__(self):
return f'Модель машины - {self.model}'
my_car = Car('Camry') # создаем объект класса Car
print(my_car) # выводим информацию об объекте в терминал
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

91.

Теория
Методы __str__() и __repr__()
class Car:
# инициализатор класса
def __init__(self, model):
self.model = model # модель
# отображения информации об объекте в понятном для пользователя виде
def __str__(self):
return f'Модель машины - {self.model}'
my_car = Car('Camry') # создаем объект класса Car
print(my_car) # выводим информацию об объекте в терминал
>>> Модель машины - Camry
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

92.

Теория
Методы __str__() и __repr__()
class Car:
# инициализатор класса
def __init__(self, model):
self.model = model # модель
# отображения
информации
об объекте
в понятном
для пользователя
__str__() – магический
метод,
отображающий
информацию
об экземпляре
классавиде
в
defпользователя
__str__(self):
понятном для
виде. Возвращает строку.
return f'Модель машины - {self.model}'
my_car = Car('Camry') # создаем объект класса Car
print(my_car) # выводим информацию об объекте в терминал
>>> Модель машины - Camry
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

93.

Теория
Методы __str__() и __repr__()
class Car:
# инициализатор класса
def __init__(self, model):
self.model = model # модель
# отображения информации об объекте в понятном для пользователя виде
def __str__(self):
return f'Модель машины - {self.model}’
def __repr__(self):
my_car = Car('Camry') # создаем объект класса Car
print(my_car) # выводим информацию об объекте в терминал
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

94.

Теория
Методы __str__() и __repr__()
class Car:
# инициализатор класса
def __init__(self, model):
self.model = model # модель
# отображения информации об объекте в понятном для пользователя виде
def __str__(self):
return f'Модель машины - {self.model}'
def __repr__(self):
return f'Car({self.model})'
my_car = Car('Camry') # создаем объект класса Car
print(my_car) # выводим информацию об объекте в терминал
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

95.

Теория
Методы __str__() и __repr__()
class Car:
# инициализатор класса
def __init__(self, model):
self.model = model # модель
# отображения информации об объекте в понятном для пользователя виде
def __str__(self):
return f'Модель машины - {self.model}'
# отображения информации об объекте в понятном для разработчика виде
def __repr__(self):
return f'Car({self.model})'
my_car = Car('Camry') # создаем объект класса Car
print(my_car) # выводим информацию об объекте в терминал
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

96.

Теория
Методы __str__() и __repr__()
class Car:
# инициализатор класса
def __init__(self, model):
self.model = model # модель
# отображения информации об объекте в понятном для пользователя виде
def __str__(self):
return f'Модель машины - {self.model}'
# отображения информации об объекте в понятном для разработчика виде
def __repr__(self):
return f'Car({self.model})'
my_car = Car('Camry') # создаем объект класса Car
print(my_car) # выводим информацию об объекте в терминал
>>> Модель машины - Camry
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

97.

Теория
Методы __str__() и __repr__()
class Car:
# инициализатор класса
def __init__(self, model):
self.model = model # модель
# отображения информации об объекте в понятном для пользователя виде
def __str__(self):
return f'Модель машины - {self.model}'
# отображения информации об объекте в понятном для разработчика виде
def __repr__(self):
return f'Car({self.model})'
my_car = Car('Camry') # создаем объект класса Car
print(my_car) # выводим информацию об объекте в терминал
print(repr(my_car))
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

98.

Теория
Методы __str__() и __repr__()
class Car:
# инициализатор класса
def __init__(self, model):
self.model = model # модель
# отображения
об объекте в понятном для пользователя виде
>>> Модель
машины -информации
Camry
def __str__(self):
Car(Camry)
return f'Модель машины - {self.model}'
# отображения информации об объекте в понятном для разработчика виде
def __repr__(self):
return f'Car({self.model})'
my_car = Car('Camry') # создаем объект класса Car
print(my_car) # выводим информацию об объекте в терминал
print(repr(my_car))
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

99.

Теория
Методы __str__() и __repr__()
class Car:
# инициализатор класса
def __init__ (self, model):
self.model = model # модель
# отображения информации об объекте в понятном для пользователя виде
def __str__(self):
return f'Модель машины - {self.model}'
# отображения информации об объекте в понятном для разработчика виде
def __repr__(self):
return f'Car({self.model})'
my_car = Car('Camry') # создаем объект класса Car
# выводим информацию об объекте в терминал
print(my_car)
# вызов метода __str__()
print(repr(my_car))
# вызов метода __repr__()
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

100.

Теория
Методы __str__() и __repr__()
class Car:
# инициализатор класса
def __init__(self, model):
self.model = model # модель
__repr__() –# магический
метод,
отображающий
информацию
экземпляре
класса
в
отображения
информации
об объекте
в понятномоб
для
пользователя
виде
понятном для
виде. Возвращает строку, полезен при тестировании и
defразработчика
__str__(self):
отладке программы.
return f'Модель машины - {self.model}'
# отображения информации об объекте в понятном для разработчика виде
def __repr__(self):
return f'Car({self.model})'
my_car = Car('Camry') # создаем объект класса Car
# выводим информацию об объекте в терминал
print(my_car)
# вызов метода __str__()
print(repr(my_car))
# вызов метода __repr__()
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

101.

Теория
Методы __str__() и __repr__()
class Car:
# инициализатор класса
def __init__(self, model):
self.model = model # модель
# отображения информации об объекте в понятном для разработчика виде
def __repr__(self):
return f'Car({self.model})'
my_car = Car('Camry') # создаем объект класса Car
print(my_car) # выводим информацию об объекте в терминал
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

102.

Теория
Методы __str__() и __repr__()
class Car:
# инициализатор класса
def __init__(self, model):
self.model = model # модель
# отображения информации об объекте в понятном для разработчика виде
def __repr__(self):
return f'Car({self.model})'
my_car = Car('Camry') # создаем объект класса Car
print(my_car) # выводим информацию об объекте в терминал
>>> Car(Camry)
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

103.

Теория
Магические методы арифм. операций
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

104.

Теория
Оператор
Магические методы арифм. операций
Магический метод
Расшифровка
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

105.

Теория
Оператор
+
Магические методы арифм. операций
Магический метод
__add__()
Расшифровка
add (сложить)
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

106.

Магические методы арифм. операций
Теория
Оператор
Магический метод
Расшифровка
+
__add__()
add (сложить)
-
__sub__()
subtract (вычесть)
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

107.

Магические методы арифм. операций
Теория
Оператор
Магический метод
Расшифровка
+
__add__()
add (сложить)
-
__sub__()
subtract (вычесть)
*
__mul__()
multiply (умножить)
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

108.

Магические методы арифм. операций
Теория
Оператор
Магический метод
Расшифровка
+
__add__()
add (сложить)
-
__sub__()
subtract (вычесть)
*
__mul__()
multiply (умножить)
**
__pow__()
power (степень)
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

109.

Магические методы арифм. операций
Теория
Оператор
Магический метод
Расшифровка
+
__add__()
add (сложить)
-
__sub__()
subtract (вычесть)
*
__mul__()
multiply (умножить)
**
__pow__()
power (степень)
/
__truediv__()
true division (обычное
деление)
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

110.

Магические методы арифм. операций
Теория
Оператор
Магический метод
Расшифровка
+
__add__()
add (сложить)
-
__sub__()
subtract (вычесть)
*
__mul__()
multiply (умножить)
**
__pow__()
power (степень)
/
__truediv__()
true division (обычное
деление)
//
__floordiv__()
floor division
(целочисленное
деление)
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

111.

Магические методы арифм. операций
Теория
Оператор
Магический метод
Расшифровка
+
__add__()
add (сложить)
-
__sub__()
subtract (вычесть)
*
__mul__()
multiply (умножить)
**
__pow__()
power (степень)
/
__truediv__()
true division (обычное
деление)
//
__floordiv__()
floor division
(целочисленное
деление)
%
__mod__()
modulo (деление по
модулю)
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

112.

Задание №
2
Реализуйте класс MoneyBox, описывающий копилку с деньгами. Внутри которого должны быть
описаны следующие свойства:
__money (целое число) – текущее количество денег в копилке. Значение по умолчанию – 0
Также должны быть реализованы следующие методы:
__init__() – инициализация объекта с начальными значениями свойств
__repr__() – метод для строкового представления объекта, возвращает текущее количество
денег в виде строки
__add__() – метод для увеличения количества денег в копилке на определенное значение
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

113.

class MoneyBox:
# инициализатор класса
def __init__():

114.

class MoneyBox:
# инициализатор класса
def __init__(self, money):

115.

class MoneyBox:
# инициализатор класса
def __init__(self, money=0):

116.

class MoneyBox:
# инициализатор класса
def __init__(self, money=0):
self.__money = money
# текущее количество денег

117.

class MoneyBox:
# инициализатор класса
def __init__(self, money=0):
self.__money = money
# текущее количество денег
def __repr__(self):

118.

class MoneyBox:
# инициализатор класса
def __init__(self, money=0):
self.__money = money
# текущее количество денег
def __repr__(self):
return

119.

class MoneyBox:
# инициализатор класса
def __init__(self, money=0):
self.__money = money
# текущее количество денег
def __repr__(self):
return self.__money

120.

class MoneyBox:
# инициализатор класса
def __init__(self, money=0):
self.__money = money
# текущее количество денег
# возвращает текущее количество денег в виде строки
def __repr__(self):
return self.__money

121.

class MoneyBox:
# инициализатор класса
def __init__(self, money=0):
self.__money = money
# текущее количество денег
# возвращает текущее количество денег в виде строки
def __repr__(self):
return f'{self.__money}'

122.

class MoneyBox:
# инициализатор класса
def __init__(self, money=0):
self.__money = money
# текущее количество денег
# возвращает текущее количество денег в виде строки
def __repr__(self):
return f'{self.__money}'
def __add__(): # реализация добавления денег в копилку

123.

class MoneyBox:
# инициализатор класса
def __init__(self, money=0):
self.__money = money
# текущее количество денег
# возвращает текущее количество денег в виде строки
def __repr__(self):
return f'{self.__money}'
def __add__(self, other): # реализация добавления денег в копилку

124.

class MoneyBox:
# инициализатор класса
def __init__(self, money=0):
self.__money = money
# текущее количество денег
# возвращает текущее количество денег в виде строки
def __repr__(self):
return f'{self.__money}'
def __add__(self, other): # реализация добавления денег в копилку
# новый объект класса MoneyBox с бОльшим кол-вом денег
return MoneyBox(self.__money + other)

125.

class MoneyBox:
# инициализатор класса
def __init__(self, money=0):
self.__money = money
# текущее количество денег
# возвращает текущее количество денег в виде строки
def __repr__(self):
return f'{self.__money}'
def __add__(self, other): # реализация добавления денег в копилку
# новый объект класса MoneyBox с бОльшим кол-вом денег
return MoneyBox(self.__money + other)
box = MoneyBox(123)
# создаем объект класса MoneyBox

126.

class MoneyBox:
# инициализатор класса
def __init__(self, money=0):
self.__money = money
# текущее количество денег
# возвращает текущее количество денег в виде строки
def __repr__(self):
return f'{self.__money}'
def __add__(self, other): # реализация добавления денег в копилку
# новый объект класса MoneyBox с бОльшим кол-вом денег
return MoneyBox(self.__money + other)
box = MoneyBox(123)
box = box + 10
# создаем объект класса MoneyBox
# добавляем деньги в копилку

127.

class MoneyBox:
# инициализатор класса
def __init__(self, money=0):
self.__money = money
# текущее количество денег
# возвращает текущее количество денег в виде строки
def __repr__(self):
return f'{self.__money}'
def __add__(self, other): # реализация добавления денег в копилку
# новый объект класса MoneyBox с бОльшим кол-вом денег
return MoneyBox(self.__money + other)
box = MoneyBox(123)
box = box + 10
print(box)
# создаем объект класса MoneyBox
# добавляем деньги в копилку
# выводим на экран текущее количество денег

128.

class MoneyBox:
# инициализатор класса
def __init__(self, money=0):
self.__money = money
# текущее количество денег
# возвращает текущее количество денег в виде строки
def __repr__(self):
return f'{self.__money}'
def __add__(self, other): # реализация добавления денег в копилку
# новый объект класса MoneyBox с бОльшим кол-вом денег
return MoneyBox(self.__money + other)
box = MoneyBox(123)
box = box + 10
print(box)
>>> 133
# создаем объект класса MoneyBox
# добавляем деньги в копилку
# выводим на экран текущее количество денег

129.

class MoneyBox:
# инициализатор класса
def __init__(self, money=0):
self.__money = money
# текущее количество денег
# возвращает текущее количество денег в виде строки
def __repr__(self):
return f'{self.__money}'
def __add__(self, other): # реализация добавления денег в копилку
# новый объект класса MoneyBox с бОльшим кол-вом денег
return MoneyBox(self.__money + other)
box = MoneyBox(123)
box += 10
print(box)
# создаем объект класса MoneyBox
# добавляем деньги в копилку
# выводим на экран текущее количество денег

130.

class MoneyBox:
# инициализатор класса
def __init__(self, money=0):
self.__money = money
# текущее количество денег
# возвращает текущее количество денег в виде строки
def __repr__(self):
return f'{self.__money}'
def __add__(self, other): # реализация добавления денег в копилку
# новый объект класса MoneyBox с бОльшим кол-вом денег
return MoneyBox(self.__money + other)
box = MoneyBox(123)
box += 10
print(box)
>>> 133
# создаем объект класса MoneyBox
# добавляем деньги в копилку
# выводим на экран текущее количество денег

131.

class MoneyBox:
# инициализатор класса
def __init__(self, money=0):
self.__money = money
# текущее количество денег
# возвращает текущее количество денег в виде строки
def __repr__(self):
return f'{self.__money}'
def __add__(self, other): # реализация добавления денег в копилку
# новый объект класса MoneyBox с бОльшим кол-вом денег
return MoneyBox(self.__money + other)
box = MoneyBox(123)
#box += 10
box += 10.56
print(box)
# создаем объект класса MoneyBox
# добавляем деньги в копилку
# складываем с дробным числом
# выводим на экран текущее количество денег

132.

class MoneyBox:
# инициализатор класса
def __init__(self, money=0):
self.__money = money
# текущее количество денег
# возвращает текущее количество денег в виде строки
def __repr__(self):
return f'{self.__money}'
def __add__(self, other): # реализация добавления денег в копилку
# новый объект класса MoneyBox с бОльшим кол-вом денег
return MoneyBox(self.__money + other)
box = MoneyBox(123)
#box += 10
box += 10.56
print(box)
>>> 133.56
# создаем объект класса MoneyBox
# добавляем деньги в копилку
# складываем с дробным числом
# выводим на экран текущее количество денег

133.

class MoneyBox:
# инициализатор класса
def __init__(self, money=0):
self.__money = money
# текущее количество денег
# возвращает текущее количество денег в виде строки
def __repr__(self):
return f'{self.__money}'
def __add__(self, other): # реализация добавления денег в копилку
# новый объект класса MoneyBox с бОльшим кол-вом денег
return MoneyBox(self.__money + other)
box = MoneyBox(123)
#box += 10
#box += 10.56
box += '10'
print(box)
# создаем объект класса MoneyBox
# добавляем деньги в копилку
# складываем с дробным числом
# складываем объект box со строкой (ошибка)
# выводим на экран текущее количество денег

134.

class MoneyBox:
# инициализатор класса
def __init__(self, money=0):
self.__money = money
# текущее количество денег
# возвращает текущее количество денег в виде строки
def __repr__(self):
return f'{self.__money}'
def __add__(self, other): # реализация добавления денег в копилку
# новый объект класса MoneyBox с бОльшим кол-вом денег
return MoneyBox(self.__money + other)
box = MoneyBox(123)
#box += 10
#box += 10.56
box += '10'
print(box)
# создаем объект класса MoneyBox
# добавляем деньги в копилку
# складываем с дробным числом
# складываем объект box со строкой (ошибка)
# выводим на экран текущее количество денег
>>> TypeError: unsupported operand type(s) for +: 'int' and 'str'

135.

class MoneyBox:
# инициализатор класса
def __init__(self, money=0):
self.__money = money
# текущее количество денег
# возвращает текущее количество денег в виде строки
def __repr__(self):
return f'{self.__money}'
def __add__(self, other): # реализация добавления денег в копилку
# проверка, складываем с целым или дробным числом
if isinstance(other, (int, float)):
# новый объект класса MoneyBox с бОльшим кол-вом денег
return MoneyBox(self.__money + other)
box = MoneyBox(123)
#box += 10
#box += 10.56
box += '10'
print(box)
# создаем объект класса MoneyBox
# добавляем деньги в копилку
# складываем с дробным числом
# складываем объект box со строкой (ошибка)
# выводим на экран текущее количество денег

136.

class MoneyBox:
# инициализатор класса
def __init__(self, money=0):
self.__money = money
# текущее количество денег
# возвращает текущее количество денег в виде строки
def __repr__(self):
return f'{self.__money}'
def __add__(self, other): # реализация добавления денег в копилку
# проверка, складываем с целым или дробным числом
if isinstance(other, (int, float)):
# новый объект класса MoneyBox с бОльшим кол-вом денег
isinstance() return
– функция,
возвращающая True, если+ объект
MoneyBox(self.__money
other)является экземпляром
указанного класса или классов. В противном случае возвращает False.
box = MoneyBox(123)
#box += 10
#box += 10.56
box += '10'
print(box)
# создаем объект класса MoneyBox
# добавляем деньги в копилку
# складываем с дробным числом
# складываем объект box со строкой (ошибка)
# выводим на экран текущее количество денег
>>> TypeError: unsupported operand type(s) for +: 'int' and 'str'

137.

class MoneyBox:
# инициализатор класса
def __init__(self, money=0):
self.__money = money
# текущее количество денег
# возвращает текущее количество денег в виде строки
def __repr__(self):
return f'{self.__money}'
def __add__(self, other): # реализация добавления денег в копилку
# проверка, складываем с целым или дробным числом
if isinstance(other, (int, float)):
# новый объект класса MoneyBox с бОльшим кол-вом денег
return MoneyBox(self.__money + other)
else: # если складываем не с целым или дробным числом
# выводим информацию о некорректном сложении
print('Некорректное сложение')
box = MoneyBox(123)
#box += 10
#box += 10.56
box += '10'
print(box)
# создаем объект класса MoneyBox
# добавляем деньги в копилку
# складываем с дробным числом
# складываем объект box со строкой (ошибка)
# выводим на экран текущее количество денег

138.

class MoneyBox:
# инициализатор класса
def __init__(self, money=0):
self.__money = money
# текущее количество денег
# возвращает текущее количество денег в виде строки
def __repr__(self):
return f'{self.__money}'
def __add__(self, other): # реализация добавления денег в копилку
# проверка, складываем с целым или дробным числом
if isinstance(other, (int, float)):
# новый объект класса MoneyBox с бОльшим кол-вом денег
return MoneyBox(self.__money + other)
else: # если складываем не с целым или дробным числом
# выводим информацию о некорректном сложении
print('Некорректное сложение')
box = MoneyBox(123)
#box += 10
#box += 10.56
box += '10'
print(box)
# создаем объект класса MoneyBox
# добавляем деньги в копилку
# складываем с дробным числом
# складываем объект box со строкой (ошибка)
# выводим на экран текущее количество денег
>>> Некорректное сложение
None

139.

class MoneyBox:
# инициализатор класса
def __init__(self, money=0):
self.__money = money
# текущее количество денег
# возвращает текущее количество денег в виде строки
def __repr__(self):
return f'{self.__money}'
def __add__(self, other): # реализация добавления денег в копилку
# проверка, складываем с целым или дробным числом
if isinstance(other, (int, float)):
# новый объект класса MoneyBox с бОльшим кол-вом денег
return MoneyBox(self.__money + other)
else: # если складываем не с целым или дробным числом
# выводим информацию о некорректном сложении
print('Некорректное сложение')
box = MoneyBox(123)
box = 10 + box
#box += 10.56
#box += '10'
print(box)
# создаем объект класса MoneyBox
# добавляем деньги в копилку
# складываем с дробным числом
# складываем объект box со строкой (ошибка)
# выводим на экран текущее количество денег

140.

class MoneyBox:
# инициализатор класса
def __init__(self, money=0):
self.__money = money
# текущее количество денег
# возвращает текущее количество денег в виде строки
def __repr__(self):
return f'{self.__money}'
def __add__(self, other): # реализация добавления денег в копилку
# проверка, складываем с целым или дробным числом
if isinstance(other, (int, float)):
# новый объект класса MoneyBox с бОльшим кол-вом денег
return MoneyBox(self.__money + other)
else: # если складываем не с целым или дробным числом
# выводим информацию о некорректном сложении
print('Некорректное сложение')
box = MoneyBox(123)
box = 10 + box
#box += 10.56
#box += '10'
print(box)
# создаем объект класса MoneyBox
# добавляем деньги в копилку
# складываем с дробным числом
# складываем объект box со строкой (ошибка)
# выводим на экран текущее количество денег
>>> TypeError: unsupported operand type(s) for +: 'int' and 'MoneyBox'

141.

class MoneyBox:
# инициализатор класса
def __init__(self, money=0):
self.__money = money
# текущее количество денег
# возвращает текущее количество денег в виде строки
def __repr__(self):
return f'{self.__money}'
def __add__(self, other): # реализация добавления денег в копилку
# проверка, складываем с целым или дробным числом
if isinstance(other, (int, float)):
# новый объект класса MoneyBox с бОльшим кол-вом денег
return MoneyBox(self.__money + other)
else: # если складываем не с целым или дробным числом
# выводим информацию о некорректном сложении
print('Некорректное сложение’)
def __radd__(self, other): # зеркальный метод для __add__()
# вызываем метод __add__() с переставленными операндами
return self.__add__(other)
box = MoneyBox(123)
box = 10 + box
#box += 10.56
#box += '10'
print(box)
# создаем объект класса MoneyBox
# добавляем деньги в копилку
# складываем с дробным числом
# складываем объект box со строкой (ошибка)
# выводим на экран текущее количество денег

142.

class MoneyBox:
# инициализатор класса
def __init__(self, money=0):
self.__money = money
# текущее количество денег
# возвращает текущее количество денег в виде строки
def __repr__(self):
return f'{self.__money}'
def __add__(self, other): # реализация добавления денег в копилку
# проверка, складываем с целым или дробным числом
if isinstance(other, (int, float)):
# новый объект класса MoneyBox с бОльшим кол-вом денег
return MoneyBox(self.__money + other)
else: # если складываем не с целым или дробным числом
# выводим информацию о некорректном сложении
print('Некорректное сложение’)
def __radd__(self, other): # зеркальный метод для __add__()
# вызываем метод __add__() с переставленными операндами
return self.__add__(other)
box = MoneyBox(123)
box = 10 + box
#box += 10.56
#box += '10'
print(box)
>>> 133
# создаем объект класса MoneyBox
# добавляем деньги в копилку
# складываем с дробным числом
# складываем объект box со строкой (ошибка)
# выводим на экран текущее количество денег

143.

class MoneyBox:
# инициализатор класса
def __init__(self, money=0):
self.__money = money
# текущее количество денег
# возвращает текущее количество денег в виде строки
def __repr__(self):
return f'{self.__money}'
def __add__(self, other): # реализация добавления денег в копилку
# проверка, складываем с целым или дробным числом
if isinstance(other, (int, float)):
# новый объект класса MoneyBox с бОльшим кол-вом денег
__radd__() – зеркальный
метод для __add__(), позволяющий проводить сложение с
return MoneyBox(self.__money + other)
любым порядком
Зеркальные
методы
и для
других магических
else: операндов.
# если складываем
не с целым
или есть
дробным
числом
методов, реализующих
математические
# выводим
информацию ооперации.
некорректном сложении
print('Некорректное сложение’)
def __radd__(self, other): # зеркальный метод для __add__()
# вызываем метод __add__() с переставленными операндами
return self.__add__(other)
box = MoneyBox(123)
box = 10 + box
#box += 10.56
#box += '10'
print(box)
>>> 133
# создаем объект класса MoneyBox
# добавляем деньги в копилку
# складываем с дробным числом
# складываем объект box со строкой (ошибка)
# выводим на экран текущее количество денег

144.

class MoneyBox:
# инициализатор класса
def __init__(self, money=0):
self.__money = money
# текущее количество денег
# возвращает текущее количество денег в виде строки
def __repr__(self):
return f'{self.__money}'
def __add__(self, other): # реализация добавления денег в копилку
# проверка, складываем с целым или дробным числом
if isinstance(other, (int, float)):
# новый объект класса MoneyBox с бОльшим кол-вом денег
return MoneyBox(self.__money + other)
else: # если складываем не с целым или дробным числом
# выводим информацию о некорректном сложении
print('Некорректное сложение')
def __radd__(self, other): # зеркальный метод для __add__()
# вызываем метод __add__() с переставленными операндами
return self.__add__(other)
box = MoneyBox(123)
# создаем объект класса MoneyBox
box = box + 10
# добавляем деньги в копилку
box += 10
# складываем в сокращенной форме
box += 10.56
# складываем с дробным числом
box += '10'
# складываем объект box со строкой (ошибка)
box = 10 + box
# меняем операнды в выражении
print(box)
# выводим на экран текущее количество денег

145.

ИТОГ
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

146.

ИТОГ
Какой элемент в названии метода указывает на то, что он «магический»?
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

147.

ИТОГ
Какой элемент в названии метода указывает на то, что он «магический»?
Магические методы имеют в своем названии по два символа нижнего
подчеркивания слева и справа. Например, __init__().
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

148.

ИТОГ
Какой элемент в названии метода указывает на то, что он «магический»?
Магические методы имеют в своем названии по два символа нижнего
подчеркивания слева и справа. Например, __init__().
Для чего нужен магический метод __new__()?
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

149.

ИТОГ
Какой элемент в названии метода указывает на то, что он «магический»?
Магические методы имеют в своем названии по два символа нижнего
подчеркивания слева и справа. Например, __init__().
Для чего нужен магический метод __new__()?
Магический метод __new__() отвечает
неинициализированного экземпляра класса
за
создание
нового,
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

150.

ИТОГ
Какой элемент в названии метода указывает на то, что он «магический»?
Магические методы имеют в своем названии по два символа нижнего
подчеркивания слева и справа. Например, __init__().
Для чего нужен магический метод __new__()?
Магический метод __new__() отвечает
неинициализированного экземпляра класса
за
создание
нового,
Какой тип данных возвращают методы __str__() и __repr__()?
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

151.

ИТОГ
Какой элемент в названии метода указывает на то, что он «магический»?
Магические методы имеют в своем названии по два символа нижнего
подчеркивания слева и справа. Например, __init__().
Для чего нужен магический метод __new__()?
Магический метод __new__() отвечает
неинициализированного экземпляра класса
за
создание
нового,
Какой тип данных возвращают методы __str__() и __repr__()?
Методы __str__() и __repr__() должны возвращать строку
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

152.

ИТОГ
Какой элемент в названии метода указывает на то, что он «магический»?
Магические методы имеют в своем названии по два символа нижнего
подчеркивания слева и справа. Например, __init__().
Для чего нужен магический метод __new__()?
Магический метод __new__() отвечает
неинициализированного экземпляра класса
за
создание
нового,
Какой тип данных возвращают методы __str__() и __repr__()?
Методы __str__() и __repr__() должны возвращать строку
Какой магический метод позволяет реализовать логику сложения внутри
класса?
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

153.

ИТОГ
Какой элемент в названии метода указывает на то, что он «магический»?
Магические методы имеют в своем названии по два символа нижнего
подчеркивания слева и справа. Например, __init__().
Для чего нужен магический метод __new__()?
Магический метод __new__() отвечает
неинициализированного экземпляра класса
за
создание
нового,
Какой тип данных возвращают методы __str__() и __repr__()?
Методы __str__() и __repr__() должны возвращать строку
Какой магический метод позволяет реализовать логику сложения внутри
класса?
Логику сложения позволяет реализовать метод __add__()
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

154.

ИТОГ
Какой элемент в названии метода указывает на то, что он «магический»?
Магические методы имеют в своем названии по два символа нижнего
подчеркивания слева и справа. Например, __init__().
Для чего нужен магический метод __new__()?
Магический метод __new__() отвечает
неинициализированного экземпляра класса
за
создание
нового,
Какой тип данных возвращают методы __str__() и __repr__()?
Методы __str__() и __repr__() должны возвращать строку
Какой магический метод позволяет реализовать логику сложения внутри
класса?
Логику сложения позволяет реализовать метод __add__()
Для чего нужна функция isinstance()?
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

155.

ИТОГ
Какой элемент в названии метода указывает на то, что он «магический»?
Магические методы имеют в своем названии по два символа нижнего
подчеркивания слева и справа. Например, __init__().
Для чего нужен магический метод __new__()?
Магический метод __new__() отвечает
неинициализированного экземпляра класса
за
создание
нового,
Какой тип данных возвращают методы __str__() и __repr__()?
Методы __str__() и __repr__() должны возвращать строку
Какой магический метод позволяет реализовать логику сложения внутри
класса?
Логику сложения позволяет реализовать метод __add__()
Для чего нужна функция isinstance()?
Функция isinstance() проверяет, является ли указанный объект
экземпляром указанного класса или классов
©2023 ООО «Юмакс». Все права защищены. Любое использование материалов допускается только с письменного согласия компании

156.

DS
Программирование
Python
Спасибо за внимание!
English     Русский Правила