Теория

Python: Основы ООП

Для осознанной работы с Python нужно представлять себе, что такое объекты, классы и объектно-ориентированное программирование.
Пусть переменная user хранит всю информацию о пользователе. Там должно быть много разнородных данных, например, имя, телефон, адрес. Всё это — свойства, определяющие конкретного пользователя.
Дадим свойствам имена, и тогда в переменной user свойство name будет содержать имя пользователя, а phone — телефон. Теперь к этим свойствам можно обратиться через точечную нотацию: user.name и user.phone.
Одинаковые структуры часто требуют одинаковой обработки, и потому функции-обработчики включены в состав этих структур. Такие функции называются методы. В случае с переменной user будет удобно иметь метод show, функцию, которая выведет на экран значения свойств user.name, user.phone и user.address.
Структура, объединяющая свойства и методы, называется класс.
В биологии каждое живое существо относят к определённому классу: птицы, рыбы, земноводные. Собака Жучка — это экземпляр класса «млекопитающие».
В программировании экземпляры класса иначе называют объекты. Класс подобен чертежу автомобиля, а объект — это ваша машина, созданная по этому чертежу.
Принцип программирования, основанный на идее классов и объектов, называется «объектно-ориентированное программирование», сокращенно «ООП».
Способ, которым вы обращаетесь к свойствам и методам объекта — интерфейс. Запомните это слово: его часто спрашивают на собеседованиях.
Класс похож на бланк документа. Скажем, бланк контакта в записной книжке:
  • Название бланка: Контакт
  • Доступные поля для заполнения (свойства):
    • name: Имя контакта
    • phone: Телефон контакта
    • birthday: День рождения
Скопировать кодPYTHON
# создаём класс Contact # здесь __init__ и self - специальные ключевые слова, # с ними разберёмся в следующем уроке class Contact: def __init__(self, name, phone, address, birthday): # функция, которая принимает аргументы name, phone, address, birthday, создаёт объект и в нём сохраняет их значения self.name = name self.phone = phone self.address = address self.birthday = birthday
Чтобы создать новый контакт, в пустой бланк вносят данные конкретного человека. Заполненный бланк — это объект, экземпляр класса.
  • Название бланка: Контакт
  • Заполненные поля (свойства):
    • name: Лев Толстой
    • phone: +7 (123) 456-78-90
    • address: Ясная Поляна
    • birthday: 9.09.1828
Скопировать кодPYTHON
# cоздаём объект leo класса Contact с набором свойств: leo = Contact(name="Лев Толстой", phone="+7 (123) 456-78-90", address="Ясная Поляна", birthday="9.09.1828") # а можно так, покороче: leo = Contact("Лев Толстой", "+7 (123) 456-78-90", "Ясная Поляна", "9.09.1828")
Задача   2 / 2
1.
  • Добавьте к классу Contact свойства address и birthday
  • Создайте объект mike типа Contact с такими данными:
имя: Михаил Булгаков
телефон: 2-03-27
адрес: Россия, Москва, Большая Пироговская, дом 35б, кв. 6
день рождения: 15.05.1891
Создайте объект vlad типа Contact с такими данными:
имя: Владимир Маяковский
телефон: 73-88
адрес: Россия, Москва, Лубянский проезд, д. 3, кв. 12
день рождения: 19.07.1893
  • Вызовите функцию print_contact(), чтобы напечатать на экране свойства созданных объектов
Подсказка
  1. Добавьте в метод __init__ строки self.birthday = birthday и self.address = address. И не забудьте про отступы. Добавьте в метод __init__ параметры birthday и address, чтобы он мог принимать переданные значения. Определение метода теперь должно выглядеть так: def __init__(self, name, phone, birthday, address):
  2. Объект создаётся вызовом конструктора. Для создания объекта mike типа Contact вызовите конструктор и передайте в него параметры. mike = Contact("сюда имя", "сюда телефон", "сюда дату рождения", "сюда адрес") Точно так же и с объектом vlad
  3. Чтобы вызвать функцию — просто напишите print_contact()
2.
В 1927 году Булгаков переехал по новому адресу Россия, Москва, Нащокинский переулок, дом 3, кв. 44, его телефон изменился на К-058-67.
А Маяковский с Лубянки отправился в свою квартиру по адресу Россия, Москва, Гендриков переулок, дом 15, кв. 5, ему туда можно позвонить по телефону 2-35-71.
Обратитесь к нужным свойствам объектов mike и vlad и запишите в них новые значения.
Запустите код и проверьте, что получилось: на экран будут выведены новые данные.
Подсказка
Обратиться к свойству объекта можно через точечную нотацию: имя_объекта.имя_свойства. Присвоить свойству phone объекта vlad значение "2-35-71" можно так: vlad.phone = "2-35-71"
Код
Результат