#6. Режимы доступа public, private, protected. Сеттеры и геттеры | ООП Python

Поділитися
Вставка
  • Опубліковано 27 лис 2024

КОМЕНТАРІ • 149

  • @rustambox
    @rustambox 2 роки тому +100

    Очень надеюсь Сергей, что вы услышите наши мольбы и выложите курс по ООП на степик. После этих видео просто чешуться руки и хочется закрепить тему на задачах.

    • @ThevideOoLoadeR
      @ThevideOoLoadeR 2 роки тому +14

      Два чаю этому господину. Поддерживаю

    • @Py-LiFS
      @Py-LiFS Місяць тому

      Ищем на степике Добрый, добрый Python ООП - обучающий курс от Сергея Балакирева

  • @MatveyRF
    @MatveyRF 10 місяців тому +20

    -Ты приватный метод?
    - нет, я волшебный))

  • @ЕжЕжиков-в9ь
    @ЕжЕжиков-в9ь Рік тому +9

    Величина таланта преподавателя зашкаливает! Умнейший человек

  • @jaksonmillka
    @jaksonmillka 2 місяці тому +1

    Урок #6 = Пройден
    До этого видео, я уже смотрел этот урок, но в процессе, понял что многое не понимаю, и решил пройти сначала курс по Python Core. И вот я вернулся к этому же видео :)
    Опять же, так как я уже смотрел это видео, нечего нового не узнал, но был рад к нему вернутся, и "залатать" дыры в памяти :)

  • @nathalie5149
    @nathalie5149 3 роки тому +23

    На Вашем канале наиболее доходчивая подача материала из тех, что мне пока встречались. Благодарю за проделанную работу и желаю успеха в любых Ваших начинаниях! :)

  • @Bisirsky
    @Bisirsky 3 роки тому +22

    Ну наконец-то доходчиво человек объяснил для не самых умных :) спасибо!

    • @golden_horde
      @golden_horde 2 роки тому +3

      У вас синдром "Самозванца"

  • @andreychernykh256
    @andreychernykh256 3 роки тому +5

    смотрел как то видео, там java разработчик ругал геттеры и сеттеры. теперь придется пересмотреть все заново что бы понять суть его претензии. Большое спасибо за труд!!!!

  • @vladimirkulakov8667
    @vladimirkulakov8667 2 роки тому +9

    Спасибо Сергей за великолепный урок. Всё понятно и обстоятельно! Рад что вы взялись за обновление ООП.

  • @Watcherfromfar
    @Watcherfromfar 9 місяців тому +3

    Privat методы - это обработчики для гетеров, сетеров и прочих функций (например, проверка, чтобы str значение не записывали туда, где цифры)
    Privat свойства - это переменные (часто это константы), которые нельзя менять просто так. Только внутриклассовыми методами.
    Privat атрибуты защищены от случайного вызова снаружи класса (они недоступны). Рассчитаны только на использование внутри класса и только внутри, без наследования и т.п.
    Protect свойства и методы - это служебные атрибуты класса, использовать можно снаружи, но на свой страх и риск, т.к. их могут изменить другие разработчики в любой момент.
    Protect свойства и методы - рассчитаны на использование как в классе, так и для наследования в другие классы.

  • @ElenaYavorskaya
    @ElenaYavorskaya Рік тому +3

    Сергей, спасибо Вам огромное за этот бесценный материал! Очень системно и понятно объясняете, одно удовольствие изучать! 🤗

  • @wolfich4684
    @wolfich4684 Рік тому

    Вы просто гений в объяснении. От используемых слов до самого произношения. Очень уместно расставлены акценты . Смотришь как кино. Спасибо!

  • @АндрейГоликов-э3ъ
    @АндрейГоликов-э3ъ 2 роки тому +4

    Спасибо огромное, Сергей! Ваши уроки довольно исчерпывающие и развеивают в голове сложившиеся недопонимания и мифы, заполняют пробелы. Всё цельно и по полочкам)

  • @ne_zabyc_dadac
    @ne_zabyc_dadac 3 роки тому +11

    Казалось бы, предыдущий плейлист по ООП на этом канале отличный. Но даже здесь Сергей смог улучшить и добавить новых полезностей. Спасибо за труд!

  • @86Blind
    @86Blind 2 роки тому +2

    Сергей, спасибо за такой не легкий труд, за такое понятное и доходчивое объяснение

  • @alexandrvalyaev4012
    @alexandrvalyaev4012 2 роки тому +3

    Сергей, спасибо за понятные и полные объяснения! Раньше классы для меня были чем-то сложным и пугающим, сейчас пока всё понятно :)

  • @andreistasevich9894
    @andreistasevich9894 2 роки тому +2

    Очень рад, что наткнулся на Ваш канал. Материал дается последовательно и все очень доходчиво объясняется. Еще радует, что почти в каждом видео есть фишки, которые раньше не встречал. Пусть Ваш образовательный запал не иссякает)

  • @ВикторПелих-я6ш
    @ВикторПелих-я6ш Рік тому +1

    Оптимальный по продолжительноти и объёму информации ролик. Можно хоть десять раз пересмотреть и повторить вслед за автором в PyCharm-е пока не придёт его величество Понимание.

  • @dxs233
    @dxs233 Рік тому

    Огромное спасибо за этот материал, теперь я реально начал что-то понимать, сидишь, смотришь и прям кайфуешь как от уровня полного нуля приходит осознание =) тут реально все разложено как для детей, в других курсах просто жесть из стиля: это конструктор, это деструктор - идите творите и сидишь такой из стиля, а что делать то?)))))

  • @ThevideOoLoadeR
    @ThevideOoLoadeR 2 роки тому +1

    Это самое лучшее и, по сути, единственное объяснение, которое помогло мне лучше всего разобраться в сеттерах и геттерах. Спасибо!

    • @diekunstUA
      @diekunstUA Рік тому

      уроки конечно отличные, но ваш коммент приятнут за уши, про сеттеры и геттеры тут как раз упомянуто вскользь. автору спасибище!!!

    • @ThevideOoLoadeR
      @ThevideOoLoadeR Рік тому +1

      @@diekunstUA Мне помогло - вот и все) Говорю искренне

  • @NoName-ww8xm
    @NoName-ww8xm 2 роки тому +1

    ОЧЕНЬ понятно объясняете, спасибо вам огромное, Сергей!

  • @КРУГДРУЗЕЙ-д1в
    @КРУГДРУЗЕЙ-д1в 2 роки тому +1

    Сергей, огромное спасибо за Ваши труды🙏

  • @DenisMiagkikh
    @DenisMiagkikh Рік тому +1

    Сергей, спасибо большое за видео! Очень понятно все рассказываете! Было бы очень здорово, если бы у вас было больше тем с задачами на Степик)

  • @sofiipochta
    @sofiipochta 3 місяці тому +2

    Спасибо, посмотрела!

  • @gustavmess5251
    @gustavmess5251 2 роки тому +1

    Сергей, спасибо Вам огромное за эти уроки! Очень жду курс на Степике!

  • @sgfat
    @sgfat Рік тому +2

    Как всегда доступно и грамотно!

  • @empty9228
    @empty9228 2 роки тому +1

    Сергей, спасибо большое за урок!

  • @СарматПересветов

    спасибо, очень информативный урок

  • @sxnity6808
    @sxnity6808 2 роки тому +10

    9:37 А почему не staticmethod? Мы же делаем простую проверку входных чисел, которые не относятся ни к экземплярам, ни к классу? Или же это так, на случай вдруг в будущем запихнуть туда какие-то атрибуты класса?)

  • @Dmitrii-Zhinzhilov
    @Dmitrii-Zhinzhilov Рік тому +1

    Сергей, благодарю! 👍💯

  • @andredru4278
    @andredru4278 9 місяців тому +1

    Спасибо. Круто. Понравилось.

  • @kurt-miller
    @kurt-miller 3 роки тому +4

    Ещё сеттеры могут быть полезны, если необходимо добавить некие вычисления.

  • @random_act
    @random_act Рік тому

    максимлаьно полно, просто и доступно

  • @donfedor007
    @donfedor007 3 роки тому +2

    Отличный урок!

  • @TehSpeedRunner
    @TehSpeedRunner Рік тому +2

    Спасибо за лучшие объяснения на русском!
    P.S. Читается "аксе́сифай" :)

  • @igorratnik2357
    @igorratnik2357 Рік тому +1

    Спасибо большое!

  • @ИльяЗдобнов-т4н
    @ИльяЗдобнов-т4н 2 роки тому +1

    Спасибо за урок

  • @alarimnelikrim5635
    @alarimnelikrim5635 25 днів тому +1

    Это было слижком жёстко, но я смог это сделать. Написал класс Нереварин, в котором скрывал его левл и хары

  • @ISAWER1
    @ISAWER1 Рік тому +1

    лайк и комментарий в поддержку.

  • @bubakanov
    @bubakanov 8 місяців тому +2

    Судя по описанию, к атрибуту _protected есть доступ у дочерних экземпляров. Что и делалось в данном видео, но не совсем понятно в каких кейсах целесообразно использовать.

  • @konstantinpluzhnikov4862
    @konstantinpluzhnikov4862 2 роки тому +2

    с одним подчеркиванием прямо джентельменское соглашение - если хочется, то можно

  • @LAV451
    @LAV451 7 місяців тому +1

    какая жэсть) ради интереса сравните как работают модификаторы доступа к свойствам и константам класса в php 8

  • @vladimirkazancev3468
    @vladimirkazancev3468 11 місяців тому +1

    🙏 Спасибо!

  • @xandrviking1113
    @xandrviking1113 5 місяців тому +1

    Спасибо за уроки 🖖👍

  • @ИринаВыпова-р9ц
    @ИринаВыпова-р9ц 3 роки тому +2

    Спасибо!!!

  • @daniyarutegilishev3591
    @daniyarutegilishev3591 3 роки тому +4

    Приветствую Сергей спасибо за видео, очень ясно и познавательно. Подскажите предыдущий блок про ООП устарел или все же актуален?

    • @selfedu_rus
      @selfedu_rus  3 роки тому +4

      лучше смотреть этот курс, в том есть недочеты, я его со временем уберу

  • @pythoncoding1092
    @pythoncoding1092 Рік тому +1

    10:09 почему мы объявили __check_value как classmethod а не staticmethod? Ведь он не обращается к аттрибутам/методам класса, а работает с переданными параметрами

    • @selfedu_rus
      @selfedu_rus  Рік тому

      да, здесь вполне подойдет статик

  • @st0nedcreature17
    @st0nedcreature17 4 місяці тому +1

    мой мозг взорвался :D

  • @МихаилПастушков-з5м

    11:20 сделал проверку через уже имеющийся метод set_coord и обнаружил, что ему нужно сразу передать x и y без self, иначе интепртетатор ругается. Заметил, что с методом __check_value мы поступили также - не передали при вызове cls, но тут метод класса. Не могли бы вы осветить данный вопрос? Все найденные объснения в гугле не содержат именно этого нюанса. Спасибо!

  • @bubakanov
    @bubakanov 8 місяців тому +1

    Получается немного дублирования в сеттере, если мы определили входные параметры в __init__

  • @Yoshi-cb1di
    @Yoshi-cb1di Рік тому +2

    Здравствуйте! А почему вы создали __check_value через classmethod, а не через обычный метод?

    • @selfedu_rus
      @selfedu_rus  Рік тому +1

      Все, что не подразумевается для выдачи пользователю (вне класса), следует помечать закрытым. Тогда открытые методы следует поддерживать в неизменяемом виде (в разных версиях класса), а закрытые можно изменять (сигнатуру и функционал).

  • @DaddyLanzo
    @DaddyLanzo Рік тому +1

    Полистал комментарии, ответа на свой вопрос не увидел. А он вот в чем. Мы изначально имеем метод __init__, в котором есть self.__x = 0, self.__y = 0. Далее объясняется что для изменения этих значений нужно создать отдельный set_coords, который будет уже заменять значения по вызову внешней ссылки pt.set_coords(1, 2). Но почему мы не можем просто взять тот же __init__ и написать условное pt.__init__(1, 2)? Замена происходит также как и при создании сеттера. Не могу понять смысла этого дополнительного действия

    • @Александр-п9м7б
      @Александр-п9м7б Рік тому +1

      >Но почему мы не можем просто взять...
      Потому что для этого есть специальные методы и нужно использовать их.
      Питон просто допускает возможность выстрелить себе в ногу разными путями, но автором и документацией сразу оговаривается, что не надо так делать т.к. по какой-либо причине могут убрать __init__ из кода и придётся перепиливать куски кода
      Кратко говоря: не надо ломать стекло, чтобы проветрить комнату

  • @Developer_python_
    @Developer_python_ 2 роки тому +1

    Можно было воспользоваться isinstance при формировании условий в методах?

  • @rioriocccp5929
    @rioriocccp5929 Рік тому +1

    14:20 подскажите пожалуйста как вы быстро убрали два подчеркивания? какие горячие клавиши PyCharm использовали

  • @AdmiralUshakovvv
    @AdmiralUshakovvv 2 роки тому +1

    вопрос: через код-имени можно даже под защитой эксифай достать свойство?

  • @tohoto2183
    @tohoto2183 3 роки тому +3

    Здравствуйте. А не подскажите где можно взять задания для отработки ООП , в степике его так мало ,а вот вебе его весьма много ,не меньше чем циклов .

    • @kurt-miller
      @kurt-miller 3 роки тому +1

      попробуйте более жизненную задачу - например есть сайт вакансий/фильмов/книг (не важно), на котором нет фильтрации/сортировки или фильтрация работает как-то не так как хотелось бы. Спарсить это все и вывести. Сделать на ооп и без.

  • @vlad161092
    @vlad161092 Рік тому

    недопонимание на Private инкапсуляции:на примере 4:43, у нас есть
    class Point:
    def __init__(self, x=0, y=0):
    self.__x = x
    self.__y = y
    Ошибка на выполнении print(pt.__x, pt.__y). Но разве 'pt' не находится внутри класса Point?
    При этом далее, при присвоении и возврате значений методами set_coord и get_coord через экземпляр pt, значения успешно присвоены и возвращены (тут логично, экземпляр pt и другие возможные внутри одного класса вроде как)

    • @vlad161092
      @vlad161092 Рік тому

      или там логика в том, что для set_coord и get_coord мы присываем атрибуты именно переменным x, y в (self, x, y) , которые в свою очередь дают значение инкапсулированным __x и __y в (self.__x, self.__y).
      Если это всё так, то остался вопрос: pt находится внутри класса Point? 🙃

    • @selfedu_rus
      @selfedu_rus  Рік тому

      pt - это внешняя ссылка на объект класса Point

  • @augustzimnii1083
    @augustzimnii1083 2 роки тому +3

    только, наверно, лучше статический, а не класса
    @staticmethod
    def __check_value(x):
    return type(x) in (int, float)

  • @Mikhail-g3y
    @Mikhail-g3y 2 роки тому +1

    Сергей, допустимо ли в методе __init__ для исключения дублирования кода, вызвать метод set_coords?

    • @selfedu_rus
      @selfedu_rus  2 роки тому

      да и это хорошая практика

  • @gugleadik
    @gugleadik Рік тому

    в функции def __check_value(cls, x): можно писать и def __check_value(self, x): тем более, что работаем с экземпляром класса pt -> pt.set_coord(10,20). Зачем все таки писали cls в параметре, если работает и self ?

    • @selfedu_rus
      @selfedu_rus  Рік тому

      __check_value() не работает с self, туда передается параметр, он проверяется (можно вместо classmethod взять staticmethod будет лучше)

  • @impellergimpeller5133
    @impellergimpeller5133 2 роки тому +1

    👍👍👍👍👍

  • @zakirovio
    @zakirovio Рік тому +1

    а где можно дополнительно прочитать в каких случаях рекомендуется использование тех или иных режимов доступа?

  • @DEKJ1000
    @DEKJ1000 2 роки тому +1

    Досмотрел до того места где рассказывается о том, что одно нижнее подчеркивание никак не модефицирует доступ к полю класса и по сути не делает его protected, а является 'сигналом' для программиста... после cpp это просто уже кровь из глаз... Сейчас немножко отойду и дальше смотреть буду. :) Python конечно странный язык. :)

  • @МамонтовОлег-в9о
    @МамонтовОлег-в9о 2 роки тому +1

    Обратился к двум подчеркиваниям вне класса - сам себе страшный Буратино!

  • @agility3554
    @agility3554 2 роки тому +1

    А почему так в питоне устроено все? Почему можно все таки к private атрибутам обращаться? Есть какой-то аргумент в пользу этого?

    • @selfedu_rus
      @selfedu_rus  2 роки тому

      По задумке (Гвидо Ван Россума) все должно быть явным, никаких скрытых факторов. Здесь доступ к закрытым свойствам - на совести программиста.

  • @_Mr.Human_
    @_Mr.Human_ 9 місяців тому +1

    Не понял, зачем или по какой причине check_value определили методом класса? Что это дало, он же работает с параметрами передаваемыми в экземпляр при инстанцировании? Почему это метод класса тогда (если работает с параметрами. переданными на вход через экземпляр при инстанцировании, а не с внутренними каким-то полями самого класса)

    • @selfedu_rus
      @selfedu_rus  9 місяців тому

      check_value работает с данными, которые ему передаются через параметры, а не напрямую с атрибутами объекта класса, поэтому его вполне можно сделать методом класса; если сделаете обычным методом, ошибки не будет

    • @_Mr.Human_
      @_Mr.Human_ 9 місяців тому

      @@selfedu_rus а, стало яснее, спасибо! Эту разницу между данными, переданными в параметры, и сами атрибутами я упустил 😳

  • @WARRIOR-q5u
    @WARRIOR-q5u 2 роки тому +1

    Сергей, будет ли курс по данной теме на Степике? Благодарю!

    • @selfedu_rus
      @selfedu_rus  2 роки тому

      Посмотрим, пока незнаю.

  • @katekat614
    @katekat614 Рік тому +1

    Тогда как обращаться к методу check_value() который имеет декоратор @private @classmethod? Через имя класса Poin. ?

    • @selfedu_rus
      @selfedu_rus  Рік тому

      Вы имеете в виду режим доступа private? С нижним подчеркиванием? Проблем с доступом тут нет.

  • @Юрий-х5о5щ
    @Юрий-х5о5щ 2 роки тому +3

    Здравствуйте! Поясните, пожалуйста, такой момент. После добавления двух символов _ _перед переменной, ее нельзя вывести в принт, через внешнюю ссылку pt.__x. Но при этом, атрибут легко меняется по внешней ссылке, например, pt.__x = 9.(без всяких сеттеров). А после такой замены ( хотя она вроде как не должна работать), переменная с двумя подчеркиваниями легко выводится в принт через ту же самую команду pt.__x Почему так?

    • @selfedu_rus
      @selfedu_rus  2 роки тому +5

      Интересный моменты вы отметили )) Но объясняется очень просто. Когда извне создаете локальный объект (с любым именем), то он создается как глобальный. То есть в строчке pt.__x = 9 создается новый локальный атрибут с именем __x. Когда же мы внутри класса создаем self.__x, то имеем другой локальный атрибут (приватный), но он имеет также глобальное имя _имякласса__x. Вы можете в этом убедиться, распечатав: print(pt.__dict__). Там у вас будет дополнительный атрибут глобальный __x

    • @Юрий-х5о5щ
      @Юрий-х5о5щ 2 роки тому

      @@selfedu_rus Спасибо большое за пояснения! В целом понятно! Не совсем ясно только, в чем тогда защита переменных. Ведь получается, мы создаем объект класса командой pt = Point(1, 1) . При этом через __init__ этому создаваемому объекту pt присваиваются 2 новых локальных атрибута self.__x и self.__y (это же считается как создание внутри класса?). И эти параметры недоступны по внешней ссылке pt. Но, решив поменять значения, написав pt.__x = 9, они получается становятся глобальными и легкодоступными? В чем тогда защита...Или для защиты тогда нужно обязательно использовать __setattr__?

    • @selfedu_rus
      @selfedu_rus  2 роки тому +1

      @@Юрий-х5о5щ нет, вы создаете новый локальный атрибут, те защищенные остаются без изменений

    • @Юрий-х5о5щ
      @Юрий-х5о5щ 2 роки тому

      @@selfedu_rus вроде понятно, а вроде и не до конца. Получается у объекта pt появляется 2 атрибута, pt.__dict__ выводит их { '_Point__x' : 1, '__x' : 9 }. Видимо один локальный, который определен внутри класса. А второй глобальный, так? Это по аналогии с локальными и глобальными пространствами имен у функций?

    • @selfedu_rus
      @selfedu_rus  2 роки тому

      @@Юрий-х5о5щ нет, посмотрите занятие по Python ООП, где я рассказываю про разграничение доступа: proproprogs.ru/python_oop/rezhimy-dostupa-public-private-protected-settery-i-gettery

  • @teacherit5840
    @teacherit5840 2 роки тому +1

    Сергей, допустимо ли в конструкторе класса __init__ делать так? Чтобы сразу делать проверку
    class Point:
    def __init__(self, x = 0, y = 0):
    self.set_coord(x, y)

    • @selfedu_rus
      @selfedu_rus  2 роки тому +1

      да, даже предпочтительно, только начальные значения локальных атрибутов self.x, self.y нужно создать, иначе если проверка не пройдет (в сеттере) локальных атрибутов не будет (обычно присваивают некие начальные значения)

    • @teacherit5840
      @teacherit5840 2 роки тому

      @@selfedu_rus Спасибо, понял

    • @teacherit5840
      @teacherit5840 2 роки тому

      @@selfedu_rus Только если запускать файл и давать изначально значения не проходящие проверку , то уже следующая строка не запускает метод , например метод get_coord для проверки , что были установлены значения 0 , 0. Так как сработало исключение.
      Если запускать в консоли и делать то же самое поочередно , то все работает

  • @kotovasya87
    @kotovasya87 2 роки тому

    Благодарю за урок.
    На 14.13 не понял почему убрали двойные подчёркивания у названия метода, но не убрали у названия атрибутов этого метода. Если атрибуты приватны, то и название метода было бы полезно указывать как приватное.

    • @selfedu_rus
      @selfedu_rus  2 роки тому

      Так мы там используем декоратор @private, чтобы сделать его приватным. Убираю подчерктвание, чтобы продемнстрировать, что он действительно приватным становится.

  • @Shadow-vs8ue
    @Shadow-vs8ue Рік тому

    Можнали изменить специальное имя этих двух подчеркиваний?

  • @Developer_python_
    @Developer_python_ Рік тому +1

    10:40 не проще было сделать статик методом вместо класс метода?

  • @Volanchick
    @Volanchick 2 роки тому

    Почему в разных источниках про protected дают разную инфу? В одних говорят что зона действия Класс и его Наследники. А в других - Модуль и даже Пакет. Что же правильно в итоге???

    • @selfedu_rus
      @selfedu_rus  2 роки тому +1

      Модуль и пакеты - тоже верно )

  • @heshagrade
    @heshagrade 2 роки тому +1

    Если "__init__()" и get_coord() выполняет то же самое, можно ли тогда в "__init__" вызвать get_coord()?

    • @selfedu_rus
      @selfedu_rus  2 роки тому

      set_coord() вы имели в виду? Да, это нормальная практика.

  • @ibrahimoglu
    @ibrahimoglu 3 роки тому +2

    👍

  • @Receive_
    @Receive_ 2 роки тому +1

    Что то не пойму, кто знает помогите, или кто понял. В методе def __init__(self, x=0, y=0) - начальные значения же здесь указаны? Зачем ниже строчка - self.__x = self.__y = 0?

    • @selfedu_rus
      @selfedu_rus  2 роки тому

      создаются локальные приватные атрибуты __x и __y, иначе бы они не создались бы

    • @Receive_
      @Receive_ 2 роки тому +1

      @@selfedu_rus Создаются они строкой self.x = x? А тут наверно задаются значения локальным свойствам класса, которые применяются когда введено не верное значение в экземпляре класса, при вызове метода класса? Если более детально в строке init - значение по умолчанию(x = 0, y = 0), в экземпляре класса в строке pt = Point(1, 2) - присваиваются новые значения и если они не пройдут проверку(__check_value), то тогда работает строка self.__x = self.__y = значение которое будет присвоено, хоть строка.

    • @justsmile963
      @justsmile963 2 роки тому +1

      @@Receive_ да, если x и y не проходят check value, то им присваивается 0

  • @KonstantinYurievich
    @KonstantinYurievich 3 роки тому +1

    @protected работает также как @private,или есть отличия?

    • @selfedu_rus
      @selfedu_rus  3 роки тому +1

      конечно, есть, @protected - можно внутри класса и во всех дочерних, @private - только внутри текущего класса

    • @KonstantinYurievich
      @KonstantinYurievich 3 роки тому +1

      @@selfedu_rus Спасибо!

  • @yar2255
    @yar2255 Рік тому

    может я не понял, но когда мы пишем print(pt.__x), то выходит ошибка (как и должно быть). Но в то же время мы можем написать pt.__x = 500 и программа отработает. ну и если смотреть переменные в консоле, то там вообще всё запутывается ещё больше. спасибо.

    • @selfedu_rus
      @selfedu_rus  Рік тому

      при pt.__x = 500 создается локальный атрибут __x и он не имеет никакого отношения к приватной переменной __x

    • @yar2255
      @yar2255 Рік тому

      @@selfedu_rus спасибо за быстрый ответ и за курс :)

  • @АлександрАлексеевич-ь5м

    Читаю комментарии после просмотра видео несколько раз, и понимаю что походу тут самый непонятливый это я:( Что означает эта защита. Защита от кого или от чего?))

    • @selfedu_rus
      @selfedu_rus  Рік тому +1

      Защита от доступа "извне" (для программиста, который это будет использовать); защита от наследования и т.д. Только "защита" несколько условная, скорее, указание программисту, что этот метод или переменную трогать не надо, она для внутренней кухни класса ))

  • @IT_science
    @IT_science 7 місяців тому +1

    Ну... Если хорошенько подумать то в python вообще нету инкапсуляции.

  • @konstantintanat4462
    @konstantintanat4462 2 дні тому +1

    нда. ооп в питоне так же как и типизация весьма корявенькая

  • @ProgrammingBro-e9t
    @ProgrammingBro-e9t Рік тому +1

    почему нельзя отдать тебе все лайки которые я когда либо ставил, а, они и так все у тебя

  • @plywoodgifts2670
    @plywoodgifts2670 8 місяців тому +1

    accessify - эксэссифай, а не эксифай.

  • @abdulloakramov7941
    @abdulloakramov7941 Рік тому

    👍👍👏👏🫡

  • @coryphoenixxx8238
    @coryphoenixxx8238 3 роки тому +1

    Все-таки "эксесифай", а не "эксифай")

  • @jonnash1683
    @jonnash1683 Рік тому

    Здравствуйте! Спасибо Вам за работу!
    Хотел попросить записать курс, если есть такая возможность, по методам разработки больших приложений

  • @northern_man_
    @northern_man_ Рік тому +1

    Подскажите, пожалуйста, можно ли в пользовательском классе, подобно встроенным классам, сделать полную защиту от внешнего вмешательства (относительно всего - добавления, изменения или удаления свойств экземпляров класса и свойств и методов самого класса)?

    • @selfedu_rus
      @selfedu_rus  Рік тому

      на уровне языка Python можно защититься, используя магические методы delitem, delattr и другие подобные (о них рассказ впереди)

    • @northern_man_
      @northern_man_ Рік тому

      @@selfedu_rus Но тогда не очень понятно, если защиту можно сконструировать при помощи магических методов, зачем нужны эти режимы доступа? Например, тот же запрет на прямое (не через сеттер) изменение какого-либо свойства экземпляра класса можно прописать в методе __setattr__ , не обращаясь к private. И, по-моему, так даже надежнее (может, я чего-то не знаю). Объясните, пожалуйста.

  • @owix6758
    @owix6758 10 місяців тому +2

    можете сказать зачем здесь @classmethod если можно было просто написать без него (ваще не разобрался зачем нужен classmethod, только если брать переменные класса и все, сколько я б не перечитывал инфы зачем он нужен, я все равно так и не понял)

    • @selfedu_rus
      @selfedu_rus  10 місяців тому +1

      в classmethod первым параметром передается класс, а не его экземпляр, благодаря этому непосредственно в классе можно создавать и изменять атрибуты

    • @owix6758
      @owix6758 10 місяців тому

      @@selfedu_rusспс дружище

  • @Konstantin_Stalnov
    @Konstantin_Stalnov Рік тому

    @selfedu_rus Почему вы в каких-то случаях говорите Свойства, в каких-то Данные, а в каких-то Атрибуты?

    • @selfedu_rus
      @selfedu_rus  Рік тому +1

      свойства объекта класса и локальные атрибуты объекта для меня это синонимы

  • @zorvis
    @zorvis 3 роки тому +1

    Спасибо!

  • @ms77grz
    @ms77grz Рік тому +1

    👍👍

  • @murodilibroximov9199
    @murodilibroximov9199 Рік тому +1

    👍

  • @jamjam3337
    @jamjam3337 Рік тому +1

    Спасибо!

  • @pnpn218
    @pnpn218 7 місяців тому

    Спасибо!