Нет интерфейсов в Питон и никогда не было и не может быть. Но что есть.
Сергей, я два месяца вас подводил, что бы сейчас начать с корня.
Не называйте мои методы жестокими, ведь вы искали то чего нет, но оно есть.
Но как очистить ваши мозги, нет лучше способа чем сделать так, что бы вы «сбились с ног»,
в конце концов очистил свою голову написав много кода, но не найдя ответа.
Ради одной просто вещи. Нам просто нужно изменить угол зрения перенеся его с объекта на поведение.
Именно с понимания поведения и берёт своё начало понятие разработки.
Статья
Нет интерфейсов в Питон и никогда не было и не может быть. Но что есть.
Сергей, я два месяца вас подводил, что бы сейчас начать с корня.
Не называйте мои методы жестокими, ведь вы искали то чего нет, но оно есть.
Но как очистить ваши мозги, нет лучше способа чем сделать так, что бы вы «сбились с ног»,
в конце концов очистил свою голову написав много кода, но не найдя ответа.
Ради одной просто вещи. Нам просто нужно изменить угол зрения перенеся его с объекта на поведение.
Нет интерфейсов в Питон и никогда не было и не может быть. Но что есть.
Есть поведение, то есть наш код в питон может иметь поведение интерфейса, но объекта интерфейса, который вы пытались отыскать нет, не было и не может быть, потому что в питон
Пожалуйста точно соблюдайте этот план:
очень точно это важно.
1. Перед прочтением выберите угол понимания статьи.
А угол понимания поведение.
Маленькое предисловие:
Возможно вы назовёте мои техники очень жёсткими. Ведь два месяца вы пытались найти в питон интерфейс, как объект. Вы искали то, чего нет. В результате пришли к выводу. Что ничего не получается. Это и есть результат, который я ожидал.
Заметьте нет в питон интерфейса, как объекта. (кто только начал с этой статьи, разберитесь что такое объект) Но есть поведение.
Зато теперь я уверен, что вы в скором будущем будете писать профессиональный код.
Что в итоге. Нам наконец-то удалось дойти до корня понимания питон, что смотреть на язык нужно не со стороны объектов, а со стороны поведения. Да, получается именно так, работаем с объектами но меняем поведение.
Пока не понять это вещь ни о какой разработке не может идти и речи, мы не способны понять чуть более менее сложный код, пока не научимся смотреть на код питон. Как на поведение объектов. И буквально это иметь в виду. Ни больше ни меньше. Буквально, именно буквально.
Прочитайте статью один раз и перечитайте этот заголовок. Переосмыслите.
Возможно вы спросите зачем было столько времени задавать вам каверзные вопросы?
Но ведь все очень просто. Для того, что бы посмотреть другим взглядом нужно исчерпать существующий, то есть свести на нет ваше знание сегодняшнее и дать вам возможность понять, что с чего то нужно начать думать правильно.
А как это сделать, если есть мусор в голове, куча отрывков мыслей, куча ранее принятых решений. Со всем этим нельзя было поступить иначе, необходимо было в пух и прах разбить ваши знания, что бы вы пришли к выводу сами, что, что то я не догоняю.
Отныне прошу смотреть на язык, как на действие, где мы с вами формируем поведение объектов.
На утро опять перечитайте статью.
Через день не ранее, начните внимательно просматривать все ссылки и переварите, переосмыслите.
И не ранее чем через три дня приступите к домашнему заданию.
(да кстати впереди нас ждёт следующее понимание, ва какая разработка бывает в принципе. Но это уже после этой темы.)
А потом пересмотрите видео, заметьте я намеренно опустил понятие поведение.
Но тем не менее, в реально написанных библиотеках мы видим применение этого слова, но как понятия для программиста:
COMPONENT_LIST = [
('EXPANDING_SPACER', None),
('SEPARATOR', None),
('SPACER', None),
('TIBERIUS_ICON', None),
('Command', None),
('Image', None),
('App', 'toga.interface.app.App'),
..............
]
Продукт Toga от от одного из ведущих разработчиков Джанго
https://beeware.org/project/projects/libraries/toga/
https://github.com/beeware/toga/blob/master/contrib/build_compat_tables.py
Вы уже большой молодец, Сергей. Знаю что много труда потратили.
Вы ведь помните, я вам задавал, что посмотрите интерфейсы Kotlin, я так понял, вы их не смотрели. На будущее прошу все до оконца доделывать.
Это я не ругаю, а просто показываю, что я вас хотел вывести на то что бы вы задумались/
Свое поведение я поясню ниже.
По крайне мере, Сергей вы сейчас очистили свой мозг и дошли до ручки:
Иными словами Вы поняли, что вы не можете реализовать Интерфейс, как объект питон.
Вот ваше сообщение:
Сергей пишет.
Вы говорите что интерфейс проверяет наличие этих методов, но я не пойму как это пишется в коде.
В нете говорят что это класс с приватными методами в котором они вызываются через публичные методы. Вообще ничего не понятно.
Я не пойму это список импортов или путей к методам или классам, и как это работает.
Валерий:
Браво теперь вы готовы принять информацию без путаницы.
Теперь вы готовы воспринять информацию в чистом виде и правильно.
Заметьте в нете куча инфы, где все пишут разницу между абстрактным классом и интерфейсом.
И можно подумать, что интерфейс действительно имеет место быть
но если мы введём
>>>python3
>>> import keyword
>>> keyword.kwlist
То ключевого слова зарезервтрованного
interface не найдём, хотя слов class есть.
Итак, если мы хотим разрабатывать на питон, то нужно уяснить вот что главное.
Duck Typing Поэтому, если у нас есть объект, который может летать и крякать, как утка, мы считаем его уткой. Это называется «Duck Typing». Во время выполнения вместо проверки типа объекта мы пытаемся вызвать метод, который, как мы ожидаем, будет иметь объект. Если он ведет себя так, как мы ожидали, мы в успокаиваемся и идем дальше. Но если этого не произойдет, то все может пойти не так. Чтобы быть в безопасности, мы часто обрабатываем исключения в try..exceptблоке или используем, hasattr (выясните и расскажите что это за метод)чтобы проверить, есть ли у объекта определенный метод.
Вот здесь себе подсекаем, что инчтрукция try/exept очень полезна.
Но теперь как же быть с кодом профи высшего класса Рассела Кейта-Маги.
https://github.com/beeware/toga/blob/master/contrib/build_compat_tables.py
Где все таки вы видим слово
interface
Да, Сергей.
Вы не там искали. Да на это было инвестировано почти 2 месяца, я вам рассказывал про интерфейсы, я знал, что вы не найдёте.
А теперь подумайте, ведь в интернет куча людей рассказывают друг другу, что интерфейсы есть в питон и с этим и живут.
Теперь, когда ваш корабль после изыскания интерфейсов разбился о рифы и вы потратив не мало сил и времени искали их точную реализацию. но признали, что их просто нет.
Повторяю, теперь вы готовы воспринимать истинный питон. как он есть.
Разработка в Питон начинается с понимания принципа:
Duck Typing Поэтому, если у нас есть объект, который может летать и крякать, как утка, мы считаем его уткой. Это называется «Duck Typing». Во время выполнения вместо проверки типа объекта мы пытаемся вызвать метод, который, как мы ожидаем, будет иметь объект. Если он ведет себя так, как мы ожидали, мы в успокаиваемся и идем дальше. Но если этого не произойдет, то все может пойти не так. Чтобы быть в безопасности, мы часто обрабатываем исключения в try..exceptблоке или используем, hasattr (выясните и расскажите что это за метод)чтобы проверить, есть ли у объекта определенный метод.
Вот здесь себе подсекаем, что инчтрукция try/exept очень полезна.
Иными словами.
Вы можем изобразить поведение Интерфейса, используя обычный абстрактный класс.
В питон на самом деле интерфейсы не нужны, именно, как ключевое слово и как объект.
Почему?
Потому что питон поддерживает множественное наследование и все можно откорректировать обычным Миксином, что есть удобно и круто.
Здесь важно себе заметить, что значит к миксинам ещё более внимание.
Но как мы видели, ключевое слово интерфейс все же используется.
Зачем оно.
Вот ситуация.
Обратите внимание на эту библиотеку:
https://toga.readthedocs.io/en/latest/
Как вы видите это графическая библиотека.
Скажите, человек делает программу?
Вопрос. Все делают одну и ту же программу?
Ответ очевиден. НЕТ.
Хорошо, вот человек создал главное окно. И решил добавить кнопку.
Если бы мы забили чистый абстрактный класс с методом, а как вы знаете, абстрактный класс это класс, который реализует хотя бы один метод и допустим метод предполагал бы надпись на кнопке.
То мы нарушили бы планы разработчика.
То есть по нашему разработчик обязан был бы подписать кнопку, а дальше больше.
В данном случае мы и применяем понятие интерфейса, но не как ключевого слова и объекта забитого в язык, а как только поведенческого понятия.
То есть строка ниже просто проверяет, что добавлена кнопка, но
сам interface не знает, какая это кнопка красная или зелёная, где она находится на главном окне и вообще ничего не знает, интерфейс, просто проверяет что кнопка есть и она добавлена, это развязывает руки.
('Button', 'toga.interface.widgets.button.Button'),
Домашнее задание.
Обратите внимание.
В тексте я помечал, так же домашние задания.
Я вас сейчас прошу посмотреть на Интерфейс питон, не как на объект, а как на поведение объекта.
В языке питон это называется утиное поведение. То есть если не важно что крякает как утка, плавает. как утка, значит это утка.
К нашему случаю. Если наш абстрактный класс ведёт себя, как интерфейс, значит это и есть интерфейс.
Поэтому я вам и говорю, что ключевые слова Джава включают
Интерфейсы в Kotlinочень похожи на интерфейсы в Java 8. Они могут содержать абстрактные методы, методы с реализацией. Главное отличие интерфейсов от абстрактных классов заключается в невозможности хранения переменных экземпляров. Они могут иметь свойства, но те должны быть либо абстрактными, либо предоставлять реализацию методов доступа.
А теперь возьмите пайтон. В отличие от котлин вы сразу можете с коробки написать абстрактный класс и указать абстрактные методы. Прочтите ещё раз в этом сообщении пример с графической программой Toga.
Согласитесь ведь это удобно, дать разработчику самому определять что делать с кнопкой, но в то же время иметь уверенность, что она добавлена. как объект button, а дальше дать разработчику полную свободу, описать что делать с кнопкой,
как назвать, в каком месте разместить.
Просто само это действие называется Интерфейсом. Я сейчас Сергей говорю об интерфейсе в питон не как об объекте. а как о поведении.
В примере с графическим интерфесом это очень удобно, программа просто проверит, что кнопка добавлена и включит её в обработку, а поведение не будет проверять.
Это даст нам возможность привести любой сложный код из объектов в порядок.
Я бы привел примеры и вашего кода предприятия, но думаю вы сами уже придёте к этому.
Теперь вы поняли. Что в языке со статической типизацией, нельзя взять тупо и объявить абстрактный класс, как в Питон, ответ прост там нет множественного наследования.
Вот для этого там и введено поднятие интерфейс, что бы объявить абстрактный класс с методами. которые ничего не реализуют, но проверяют.
Смотрите опять пример с Toga.
Согласитесь все очень просто.
Пометка для школы:
Я ведь говорю всегда одно и то же и уже на протяжении нескольких лет.
Правильно изучать программирование только с двух языков минимум, иначе никогда не будет ясности, но многие ребята игнорируют это поэтому сильно очень тормоязт своё понимание.
Хотя при взгляде на два языка. все становится на места очень элементарно.
(Python3).Ваш план и ответ на вопрос, а как собственно изучать язык программирования.
https://www.youtube.com/watch?v=R6RO8UKspZY
Быстрое и правильное освоение Python от нуля до разработки.
Вы понимаете Сергей, что это понимание полностью меняет ваше восприятие языка Питон по отношению к другим языкам.
То есть вы начинаете работать с поведением объектов.
В этом случае все становится на места, как в приведённом выше примере с графическим интерфейсом.
В одном случае абстрактный класс будет что-то делать обязательно, а в другом случае ничего не делать, но ведь проверять то будет.
Я вас прошу написать методы абстрактного класса в одном случае, когда он что-то делает, а в другом ничего не делает.
И один и вариантов назвать интерфейсом и объяснить почему.
Дополнительно прошу вас все же найти и понять, что представляет собой интерфейс в Джава и Котлин и его цель.
А потом просто перенести это поведение на пайтон смоделировав код при помощи методов.
Будем работать до тех пор, пока вы не сможете смотря на тех задачу прикидывать что и как вы реализуете.
А для этого нужен код. код и код.
Вместо P.S.
Вы наверное теперь разобрались в моей методике.
Она заключается в том. что бы привести вас к самому корню понимания.
Конечно я мог бы поступить, как делают большинство преподавателей. просто констатировать, что абстрактный класс это одно, интерфейс это другое.
Но ведь я вам давал подсказки, что интерфейс это тоже абстрактный класс.
Поэтому мне пришлось вас мучать вопросами, что бы сложить картинку в вашей голове, но вы теперь это сделали сами.
На выходе.
За эти два месяца вы чётко разобрались с декораторами.
Разобрались с миксинами и теперь я думаю после этого пояснения, ещё серьёзнее будете их изучать.
Наконец-то залезли в абстрактные классы.
И наконец то начали проектировать.
Но заметьте, только сейчас начали понимать тонко. что питон это поведение объектов.
И от этого сейчас начинаете плясать.
Код
нет кода
Рекомендации
Узнать больше в ленте
Twitter
и подписаться на
Ютуб, получать новые видео.