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

Поделиться
HTML-код
  • Опубликовано: 22 ноя 2021
  • Курс по Python ООП: stepik.org/a/116336
    Узнаете, как реализуются режимы доступа public, private, protected для атрибутов в классах языка Python. Что такое сеттеры и геттеры и зачем они нужны. Улучшенная защита атрибутов через модуль accessify.
    Инфо-сайт: proproprogs.ru/python_oop
    Telegram-канал: t.me/python_selfedu

Комментарии • 145

  • @rustambox
    @rustambox 2 года назад +92

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

    • @ThevideOoLoadeR
      @ThevideOoLoadeR 2 года назад +13

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

  • @user-rx1dg3tk8c
    @user-rx1dg3tk8c 10 месяцев назад +7

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

  • @MatveyRF
    @MatveyRF 3 месяца назад +6

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

  • @nathalie5149
    @nathalie5149 2 года назад +23

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

  • @Bisirsky
    @Bisirsky 2 года назад +20

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

    • @golden_horde
      @golden_horde 2 года назад +3

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

  • @user-dz8vu2hn2m
    @user-dz8vu2hn2m Год назад +1

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

  • @vladimirastrelin1719
    @vladimirastrelin1719 2 месяца назад +1

    Толковый урок. Сергей, спасибо большое, открываете глаза

  • @vladimirkulakov8667
    @vladimirkulakov8667 2 года назад +9

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

  • @NoName-ww8xm
    @NoName-ww8xm Год назад +1

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

  • @andreychernykh256
    @andreychernykh256 2 года назад +5

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

  • @user-jh7pb3cu2g
    @user-jh7pb3cu2g 2 года назад +4

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

  • @empty9228
    @empty9228 Год назад +1

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

  • @gustavmess5251
    @gustavmess5251 2 года назад +1

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

  • @andreistasevich9894
    @andreistasevich9894 2 года назад +2

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

  • @ElenaYavorskaya
    @ElenaYavorskaya 11 месяцев назад +3

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

  • @86Blind
    @86Blind 2 года назад +2

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

  • @sxnity6808
    @sxnity6808 Год назад +7

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

  • @alexandrvalyaev4012
    @alexandrvalyaev4012 2 года назад +3

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

  • @djfatxl
    @djfatxl Год назад +2

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

  • @user-nz3sn2bj6z
    @user-nz3sn2bj6z 8 месяцев назад +1

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

  • @ne_zabyc_dadac
    @ne_zabyc_dadac 2 года назад +11

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

    • @user-lt6ey9kn5v
      @user-lt6ey9kn5v 5 месяцев назад

      а потом еще лучше будет!

  • @wolfich4684
    @wolfich4684 Год назад

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

  • @user-qj6tk5fw9p
    @user-qj6tk5fw9p 10 месяцев назад +1

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

  • @andredru4278
    @andredru4278 2 месяца назад +1

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

  • @Dmitrii-Zhinzhilov
    @Dmitrii-Zhinzhilov Год назад +1

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

  • @donfedor007
    @donfedor007 2 года назад +2

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

  • @user-of4dn2wz1k
    @user-of4dn2wz1k 2 года назад +1

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

  • @dxs233
    @dxs233 Год назад

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

  • @igorratnik2357
    @igorratnik2357 Год назад +1

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

  • @user-jo5ij6df1d
    @user-jo5ij6df1d Год назад +1

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

  • @ThevideOoLoadeR
    @ThevideOoLoadeR 2 года назад +1

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

    • @diekunstUA
      @diekunstUA Год назад

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

    • @ThevideOoLoadeR
      @ThevideOoLoadeR Год назад +1

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

  • @user-cn9zq9th7y
    @user-cn9zq9th7y 2 года назад +2

    Спасибо!!!

  • @zorvis
    @zorvis 2 года назад +1

    Спасибо!

  • @random_act
    @random_act 7 месяцев назад

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

  • @LAV451
    @LAV451 Месяц назад +1

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

  • @bubakanov
    @bubakanov Месяц назад +2

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

  • @vladimirkazancev3468
    @vladimirkazancev3468 5 месяцев назад +1

    🙏 Спасибо!

  • @user-cb1kz3mv7j
    @user-cb1kz3mv7j 3 месяца назад +1

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

  • @kurtmiller77
    @kurtmiller77 2 года назад +4

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

  • @ISAWER1
    @ISAWER1 10 месяцев назад +1

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

  • @daniyarutegilishev3591
    @daniyarutegilishev3591 2 года назад +4

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

    • @selfedu_rus
      @selfedu_rus  2 года назад +4

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

  • @user-to8dm8tv4g
    @user-to8dm8tv4g 5 месяцев назад +1

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

  • @TehSpeedRunner
    @TehSpeedRunner 10 месяцев назад +2

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

  • @Developer_python_
    @Developer_python_ Год назад +1

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

  • @konstantinpluzhnikov4862
    @konstantinpluzhnikov4862 Год назад +2

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

  • @bubakanov
    @bubakanov Месяц назад +1

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

  • @pythoncoding1092
    @pythoncoding1092 5 месяцев назад +1

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

    • @selfedu_rus
      @selfedu_rus  5 месяцев назад

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

  • @AdmiralUshakovvv
    @AdmiralUshakovvv Год назад +1

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

  • @impellergimpeller5133
    @impellergimpeller5133 2 года назад +1

    👍👍👍👍👍

  • @ms77grz
    @ms77grz Год назад +1

    👍👍

  • @Yoshi-cb1di
    @Yoshi-cb1di 9 месяцев назад +2

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

    • @selfedu_rus
      @selfedu_rus  9 месяцев назад +1

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

  • @murodilibroximov9199
    @murodilibroximov9199 Год назад +1

    👍

  • @user-iz4rw6xy8m
    @user-iz4rw6xy8m 2 года назад +1

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

    • @selfedu_rus
      @selfedu_rus  2 года назад

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

  • @user-vb7zn7zf1o
    @user-vb7zn7zf1o 2 года назад +1

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

    • @selfedu_rus
      @selfedu_rus  2 года назад

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

  • @DaddyLanzo
    @DaddyLanzo 8 месяцев назад +1

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

    • @user-jg2nk7ze9z
      @user-jg2nk7ze9z 8 месяцев назад +1

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

  • @tohoto2183
    @tohoto2183 2 года назад +3

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

    • @kurtmiller77
      @kurtmiller77 2 года назад +1

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

  • @augustzimnii1083
    @augustzimnii1083 2 года назад +3

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

  • @rioriocccp5929
    @rioriocccp5929 5 месяцев назад +1

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

    • @selfedu_rus
      @selfedu_rus  5 месяцев назад

      это магия монтажа )))

    • @rioriocccp5929
      @rioriocccp5929 5 месяцев назад

      @@selfedu_rus серьёзно? хм...

  • @teacherit5840
    @teacherit5840 Год назад +1

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

    • @selfedu_rus
      @selfedu_rus  Год назад +1

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

    • @teacherit5840
      @teacherit5840 Год назад

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

    • @teacherit5840
      @teacherit5840 Год назад

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

  • @katekat614
    @katekat614 9 месяцев назад +1

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

    • @selfedu_rus
      @selfedu_rus  9 месяцев назад

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

  • @Developer_python_
    @Developer_python_ Год назад +1

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

  • @kotovasya87
    @kotovasya87 2 года назад

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

    • @selfedu_rus
      @selfedu_rus  2 года назад

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

  • @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 будет лучше)

  • @zakirovio
    @zakirovio 11 месяцев назад +1

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

    • @zakirovio
      @zakirovio 10 месяцев назад

      @@AntonyKondr ок

  • @Pro100Fart
    @Pro100Fart 2 года назад

    какую практическую эффективность в данном случае нам дает то, что мы сделали __check_value методом класса? Или это просто как сигнал разработчику что это метод класса? Что будет, если мы его запишем как обычный метод:
    def __check_value(self, x):
    return type(x) in (int, float)
    Это как то плохо повлияет на наш код?

    • @selfedu_rus
      @selfedu_rus  2 года назад

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

    • @Pro100Fart
      @Pro100Fart 2 года назад

      @@selfedu_rus это я понял, я о другом. Я не понимаю зачем мы этот метод делаем методом класса, что это нам дает? Почему здесь используется код
      @classmethod
      def __check_value(cls, x):
      return type(x) in (int, float)
      а не
      def __check_value(self, x):
      return type(x) in (int, float)
      Я просто не понимаю почему мы здесь используем метод класса, а не обычный метод

    • @selfedu_rus
      @selfedu_rus  2 года назад

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

  • @user-pv6ut2uo3t
    @user-pv6ut2uo3t 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

    • @user-pv6ut2uo3t
      @user-pv6ut2uo3t 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

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

    • @user-pv6ut2uo3t
      @user-pv6ut2uo3t 2 года назад

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

    • @selfedu_rus
      @selfedu_rus  2 года назад

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

  • @Shadow-vs8ue
    @Shadow-vs8ue Год назад

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

  • @vlad161092
    @vlad161092 10 месяцев назад

    недопонимание на 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 10 месяцев назад

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

    • @selfedu_rus
      @selfedu_rus  10 месяцев назад

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

  • @DEKJ1000
    @DEKJ1000 2 года назад +1

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

  • @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() вы имели в виду? Да, это нормальная практика.

  • @_Mr.Human_
    @_Mr.Human_ 2 месяца назад +1

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

    • @selfedu_rus
      @selfedu_rus  2 месяца назад

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

    • @_Mr.Human_
      @_Mr.Human_ 2 месяца назад

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

  • @agility3554
    @agility3554 2 года назад +1

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

    • @selfedu_rus
      @selfedu_rus  2 года назад

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

  • @KonstantinYurievich
    @KonstantinYurievich 2 года назад +1

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

    • @selfedu_rus
      @selfedu_rus  2 года назад +1

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

    • @KonstantinYurievich
      @KonstantinYurievich 2 года назад +1

      @@selfedu_rus Спасибо!

  • @Receive_
    @Receive_ Год назад +1

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

    • @selfedu_rus
      @selfedu_rus  Год назад

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

    • @Receive_
      @Receive_ Год назад +1

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

    • @justsmile963
      @justsmile963 Год назад +1

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

  • @yar2255
    @yar2255 Год назад

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

    • @selfedu_rus
      @selfedu_rus  Год назад

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

    • @yar2255
      @yar2255 Год назад

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

  • @eh9mjeh9mj
    @eh9mjeh9mj 4 месяца назад +1

    Есть способ ограничить класс от самого себя?)

    • @selfedu_rus
      @selfedu_rus  4 месяца назад

      только если не писать его ))

  • @user-et4if5gs8z
    @user-et4if5gs8z 2 года назад +1

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

  • @user-bv2di6ix9q
    @user-bv2di6ix9q Год назад

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

    • @selfedu_rus
      @selfedu_rus  Год назад +1

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

  • @IT_science
    @IT_science 19 дней назад +1

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

  • @abdulloakramov7941
    @abdulloakramov7941 9 месяцев назад

    👍👍👏👏🫡

  • @plywoodgifts2670
    @plywoodgifts2670 Месяц назад +1

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

  • @user-um2eu1dy8t
    @user-um2eu1dy8t 11 месяцев назад +1

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

  • @coryphoenixxx8238
    @coryphoenixxx8238 2 года назад +1

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

  • @jonnash1683
    @jonnash1683 Год назад

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

  • @northern_man_
    @northern_man_ 10 месяцев назад +1

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

    • @selfedu_rus
      @selfedu_rus  10 месяцев назад

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

    • @northern_man_
      @northern_man_ 10 месяцев назад

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

  • @Konstantin_Stalnov
    @Konstantin_Stalnov Год назад

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

    • @selfedu_rus
      @selfedu_rus  Год назад +1

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

  • @owix6758
    @owix6758 3 месяца назад +1

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

    • @selfedu_rus
      @selfedu_rus  3 месяца назад

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

    • @owix6758
      @owix6758 3 месяца назад

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

  • @jamjam3337
    @jamjam3337 Год назад +1

    Спасибо!

  • @ibrahimoglu
    @ibrahimoglu 2 года назад +2

    👍

  • @pnpn218
    @pnpn218 25 дней назад

    Спасибо!