Объектно-ориентированное программирование. Методы __init__() и __del__() в Python
24 августа 2013 г.
Archy
ООП на Python
3
При создании экземпляра класса интерпретатор автоматически вызывает метод инициализации __init__(). В некоторых языках программирования данные методы принято называть конструктором и деструктором класса. В языке программирования PHP это будет __construct(); __destruct(). Формат метода:
def __init__(self[, [, ]]):
С помощью метода __init__() можно присвоить значения по умолчанию для атрибутах класса. При создании экземпляра класса начальные значения указываются после имени класса в круглых скобках:
Пример использования метода __init__() приведен ниже:
# -*- coding: utf-8 -*- class HexColor: def __init__(self): self.colors = < 'red' : '#ff0000', 'greed' : '#7cfc00', 'blue' : '#4169e1' >hex_color = HexColor() print hex_color.colors['red'] # Получим: #ff0000 # Пример 2: Удваиваем число class DoubleMe: def __init__(self, number): self.result = number * 2 Double = DoubleMe(2) print Double.result # Получим 4
#17 – Основы ООП. Создание класса и объекта
ООП – объектно-ориентированное программирование. Является одной из наиболее важных концепций языка Python. Мы с вами приступаем к изучению теоретической и практической реализации ООП. За урок мы научимся прописывать классы и объекты в языке Питон.
Видеоурок
На начальном этапе ООП – это тёмный лес, в котором многое непонятно и слишком усложнено. На самом деле всё вовсе не так. Предлагаем абстрагироваться от специфических (непонятных) определений и познакомиться с ООП простыми словами.
ООП простыми словами
Поскольку на примере все усвоить гораздо проще, то давайте за пример возьмем робота, которого постараемся описать за счёт классов в ООП.
Класс в случае с роботом – это его чертёж. Экземпляром класса (объектом) называет целый робот, который создан точно по чертежу.
Наследование – это добавление полезных опций к чертежу робота. К примеру, берем стандартный чертёж робота и дорисуем к нему лазеры, крылья и броню. Все эти дорисовки мы сделаем в классе наследнике, основной функционал которого взят из родительского класса.
Полиморфизм – это общий функционал для всех роботов и не важно что каждый робот может очень сильно отличаться друг от друга. К примеру, в главном классе мы указываем возможность передвижения для всех последующих роботов. Далее в классе наследнике мы можем дополнительно указать возможность левитации для робота, в другом же классе укажем возможность передвижения по воде и так далее. Получается, что есть общий функционал что записан в главном чертеже, но его можно переписать для каждого последующего робота (для каждого наследника).
А инкапсуляция является для нас бронёй, защищающей робота. Под пластырем брони находятся уязвимые элементы, вроде проводов и микросхем. После прикрытия брешей с помощью брони ( protected или private ), робот полностью защищён от внешних вмешательств. По сути, мы делаем доступ ко всем полям лишь за счёт методов, тем самым прямой доступ к полю будет закрыт.
У всех классов методы могут отличаться, как и поля с конструкторами. Каждый класс позволяет создавать любое количество разных объектов, все из них имеют собственные характеристики.
Создание классов
Для создания класса необходимо прописать ключевое слово class и далее название для класса. Общепринято начинать названия классов с буквы в верхнем регистре, но если этого не сделать, то ошибки не будет.
В любом классе можно создавать поля (переменные), методы (функции), а также конструкторы.
Создав новый класс и поместив туда какую-либо информацию мы можем создавать на основе него новые объекты. Объекты будут иметь доступ ко всем характеристикам класса.
Пример простого класса приведен ниже:
class Book: pass # Класс может ничего не возвращать
На основе такого класса мы можем создать множество объектов. Каждый объект в данном случае будет представлять из себя конкретную книжку. Для каждого объекта мы можем указать уникальные данные.
Чтобы создать объект нам потребуется следующий код:
obj_new = Some() # Создание объекта obj_second = Some() # Создание 2 объекта
Простой класс Cat
class Cat: name = None age = None isHappy = None cat1 = Cat() cat1.name = "Barsik" cat1.age = 3 cat1.isHappy = True cat2 = Cat() cat2.name = "Жопен" cat2.age = 2 cat2.isHappy = False print(cat1.name) print(cat2.name)
Посмотреть остальной код можно после подписки на проект!
Задание к уроку
Необходимо оформить подписку на проект, чтобы получить доступ ко всем домашним заданиям
Большое задание по курсу
Вам необходимо оформить подписку на сайте, чтобы иметь доступ ко всем большим заданиям. В задание входит методика решения, а также готовый проект с ответом к заданию.
PS: подобные задания доступны при подписке от 1 месяца
Как изучить ООП на Python?
Здравствуйте, освоил процедурное программирование писал несколько простых игр на python ,также решал задачи на pychekio,питон тьютор,привык к языку,освоил основные начальные темы :
переменные,функции,условия,коллекции,циклы и другое.
наверное стоит переходить к ооп хотя бы узнать и опробовать что это такое ,можете подсказать хорошие книги/статьи/видео на youtube чтобы понять эту тему и очень ВАЖНО как ее применять,практику,почему это такая важная часть современного программирования ,a также дайте совет что делать дальше ,я имею в виду после изучения ооп,что стоит пробовать?
- Вопрос задан более трёх лет назад
- 3745 просмотров
2 комментария
Простой 2 комментария
ООП тебе, пожалуй, рановато — нужно подтянуть общую грамотность.
Владислав Копылов @kopylov_vlad
Когда то кодил на python. Считаю что python плохо подходит для ООП парадигмы. Советую прочитать главу «Object-oriented programming» из книги «The Hitchhiker’s Guide to Python». link
Решения вопроса 0
Ответы на вопрос 2
Синтаксис для ООП описан практически во всех современных учебниках по python.
В начале изучаем его. Как написать класс. Как создать экземпляр объекта и взаимодействовать с его атрибутами и методами. Привыкаем к self.
Далее более осознано применяем библиотеки, использующие ООП, и изучаем SOLID.
Потом всю оставшуюся жизнь учимся писать свои классы, создавая годные абстракции предметных областей.
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ну вот и напишите игру. Пошаговую. Для двух игроков. Сетевую. С классами действий и объектов. Эти самые действия и объекты передавайте сериализацией в json и http запросами. Конечно так не всегда делается, но как явный пример — очень хороший вариант.
Джанго наверное не стоит, так как это все таки целый фреймворк, который хоть и работает с классами, но имеет много своих особенностей. Для передачи данных можно пользоваться библиотекой requests — быстро, просто и удобно. Для получения данных лучше джанги в этом случае будет flask — опять же из за простоты.
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ
- Python
Почему не проходит код для решения задачи на leetcode?
- 1 подписчик
- 9 минут назад
- 11 просмотров
- Python
- +1 ещё
Почему текстовый редактор и консоль по-разному присваивают ссылки на переменные Python?
- 1 подписчик
- 31 минуту назад
- 13 просмотров
Изучение ООП в Python [дубликат]
Вообще-то довольно странный вопрос. Более простые: с чего начинать изучение Питона, с чего начинать изучение ООП. А данный вопрос несколько непонятен.
5 июл 2011 в 12:09
Большая часть ссылок уже не работает, а упоминаемые книги уже есть в «Книгах и учебных ресурсах по Python».
3 дек 2019 в 7:23
8 ответов 8
Сортировка: Сброс на вариант по умолчанию
Я начинал с Марка Лутца(4-е издание). не скажу что много узнал,(много в этой книге упущено, несмотря на ее объем в 1200 страниц), хотя многому с него научился, пока всего 2 месяца изучаю питон..
Отслеживать
ответ дан 7 дек 2011 в 6:46
119 2 2 серебряных знака 17 17 бронзовых знаков
Лутц очень размыто излагает, ИМХО, лучше книга М. Саммерфилда по 3-му Python
10 апр 2012 в 8:40
С Главы III TaPL.
Отслеживать
ответ дан 5 июл 2011 в 13:10
330 1 1 серебряный знак 6 6 бронзовых знаков
не надо сквернословить. 🙂
24 апр 2012 в 7:16
Заглянуть в вики.
- Python Programming/Object-oriented programming
- Объектно-ориентированное программирование на Питоне
Отслеживать
ответ дан 5 июл 2011 в 13:55
Nicolas Chabanovsky Nicolas Chabanovsky
51.2k 86 86 золотых знаков 266 266 серебряных знаков 505 505 бронзовых знаков
Вот вам боянистый блогопост. Прочитаете с удовольствием и сразу поймете ООП — Python, блэкджек и. ну вы поняли:)
Отслеживать
ответ дан 31 окт 2011 в 9:13
Андрей Басалыга Андрей Басалыга
1,672 13 13 серебряных знаков 15 15 бронзовых знаков
Отслеживать
ответ дан 7 июл 2011 в 9:11
hamstertamer hamstertamer
101 1 1 золотой знак 3 3 серебряных знака 14 14 бронзовых знаков
По-моему любой язык программирования требует практики и все они очень похожи! Я бы посоветовал просто начать писать. вы пишите программу, а язык это дело второе! Начните с очередного «Hello World» и неплохие примеры: решение квадратных уравнений, стрельба из пушки. Со справочникам по функциям всё будет успешно
Отслеживать
ответ дан 17 ноя 2011 в 13:55
81 2 2 серебряных знака 4 4 бронзовых знака
Все они чем-то похожи и все они чем-то разные. Но вот изучение декларативных языков после изучения императивных (а ещё хуже — после опыта работы) — может стать проблемой. Правда тема — ООП, так что упоминать декларативные не совсем уместно.
17 ноя 2011 в 14:27
Попробуйте почитать Пилгрима (Mark Pilgrim) Dive into Python. У него там отличные примеры разбираются, да и книжка в целом замечательная.
Отслеживать
ответ дан 22 июл 2013 в 10:02
mind_mixer mind_mixer
441 3 3 серебряных знака 9 9 бронзовых знаков
Отслеживать
371 1 1 золотой знак 5 5 серебряных знаков 13 13 бронзовых знаков
ответ дан 30 окт 2011 в 20:55
ShestakoffVS ShestakoffVS
238 1 1 серебряный знак 11 11 бронзовых знаков
- python
- ооп
-
Важное на Мете
Связанные
Похожие
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.15.1019
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.