Атрибуты класса, classmethod и staticmethod

Поділитися
Вставка
  • Опубліковано 26 вер 2024
  • Посмотрим в первом приближении на атрибуты класса, как с ними работать, для чего нужны декораторы classmethod и staticmethod.
    1) LEGB - правило продолжает действовать для простых имен переменных и их поиска
    2) для self атрибутов поиск идет сначала в объекте, потом в классе, затем у предков OCP(object-class-parent). То есть через селф можно достучаться как к обычным методам/атрибутам, так и к классовым, статичным
    3) если через self пытаться поменять неизменяемый атрибут (строка) класса, то будет создана локальная копия, ее не увидят другие объекты класса
    4) если менять через self изменямый атрибут класса (список), то он изменится для всех объектов класса
    5) cls - это ссылка на класс (не объект!), питон передает его под капотом. cls = Class
    6) classmethod используется для работы с атрибутами класса и с другими методами класса. Часто используется для конструирования готовых объектов
    7) staticmethod не получает ссылок под капотом, это просто функция связанная контекстом с классом. Используется редко и часто завуалированно
    Читать:
    docs.python.or...
    docs.python.or...
    Присоединяйтесь к помощи каналу, будет интересно)
    ✔️Бусти boosty.to/pyth...
    ✔️Юмани 410011506612886
    Будь первым везде и всегда, включай уведомления о новых выпусках 🔔
    Смотри там где удобно🤩
    ✔️ python_...
    ✔️ boosty.to/pyth...
    ✔️ / pythonrussian
    ✔️ t.me/python_ru...
    ✔️ dzen.ru/python...
    ✔️ rutube.ru/chan...
    #Python #PythonRussian #PyCharm

КОМЕНТАРІ • 33

  • @PythonRussian
    @PythonRussian  Рік тому +10

    Друзья, мои извинения, на вчерашнее видео было много жалоб из-за звука, это перезалив его же с усилением. Всех с наступающим Новым Годом!

  • @user-buser_eto_ja
    @user-buser_eto_ja 8 місяців тому +2

    До чего же легкая и внятная подача. Очень, очень ОГРОМНАЯ благодарность вам.

  • @Like-g6r
    @Like-g6r 9 місяців тому +2

    Браво!!!! 2 дня понимал что это такое.... а тут оказывается всё просто!!!

  • @РикСанчез-к6ъ
    @РикСанчез-к6ъ 5 місяців тому +1

    Боже мои спасибо тебе добрый человек. Месяц мучаюсь с этими методами, постоянно что непонятное выходит. Теперь понял.

  • @x-user-agent
    @x-user-agent Рік тому +1

    спасибо и с наступающим 🎄

  • @АндрейКостин-ч3ц

    Как всегда отлично. Осталось немного - сложить все лекции в общий курс.

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

    Отлично объясняешь !!!долго мучился с этой темой.

  • @aston585
    @aston585 11 місяців тому

    Разложил по полочкам! Спасибо!

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

    Наконец нашел ответы на свои вопросы, спасибо!

  • @АйдарХаертдинов-ь2ф
    @АйдарХаертдинов-ь2ф 11 місяців тому +1

    Самое лучшее видео с объяснениями на всем UA-cam про @classmethod и @staticmethod

  • @ДмитрийАгафонов-щ6у

    Автор прирожденный педагог 👋. Очень часто при изучении новой темы остается каша из не вполне систематизированных знаний. Но не в этом видео.

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

    Посмотрел, все хорошо.
    Но еще лучше, то, что в Glang нет такого классического ООП! 👍

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

      это фигня, ты на Хаскел посмотри =)

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

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

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

      а тут как масштаб и микрофон? ua-cam.com/video/hUz5m1SDYaQ/v-deo.html

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

    Будет ли видео про абстрактные классы и property? И что там по дандерметодах и их наследовании? Вообще, круто рассказываешь)

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

      да, следующее видео про дандеры, потом посмотрим, может и проперти

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

    Спасибо!

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

    Cпасибо тебе за обучающие материалы. Когда я уже сдался, и понимаю, что уже ничего не понимаю, я иду сюда.
    На 14й минуте мне кажется ты немного перемудрил .
    Когда создал атрибут ЭК, то он просто добавился в его словарь ( локальную область переменных).
    tom.__dict__ => {name = 'Tom', age = 2, breed = 'Other'}, а было {name = 'Tom', age = 2}.
    А переменная breed = 'Russian Blue' как лежала в скоопе у класса, так и лежит. BlueCat.__dict__
    Пока её не было у ЭК (tom), питон доставал её из объемлющей области.
    Причём тут hachable/mutable я не совсем понял.
    Если tom (ЭК) создать переменную names, то tom.names перестанет ссылаться на переменную names принадлежащую классу. Но если не создать... То tom.names.append('какое-то_имя') будет менять переменную в BlueCat.__dict__
    И вот об эти грабли можно расшибить лоб. Когда надо помнить:
    tom.breed is angela.breed => True
    tom.breed = 'Other'
    tom.breed is angela.breed => False
    tom.names is angela.names => True
    tom.names = ["ксс", "Томми"]
    tom.names is angela.names => False
    Если я что-то неверно понял, прошу извинить. (__dict__ написано верно, с двумя "_" "_", почему-то ютуб показывет как одно)

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

    Спасибо большое за видео! Разобрался теперь. А то другие ролики током ничего не объясняют, одна каша остаётся
    Еще вопрос. Могу ли я прислать один алгоритм который сокращает нахождение элемента вокруг элемента матрицы? Мог бы ли ты его объяснить? Спасибо

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

      нет, по коду - это надо на форум отправлять и там общаться

  • @pfk9025
    @pfk9025 Місяць тому

    Видео очень классное, автор отличный педагог!
    мне кажется можно вызвать meow внутри классметода так:
    def __init__(self, name, age):
    self.age = age
    self.name = name
    self.show_count(self) # тут передать self для my_self
    @classmethod
    def show_count(cls, my_self): # тут ловим self в my_self
    print(f'{my_self.name} - {cls.count}') # тут в my_self будет лежать пойманный self
    my_self.meow() # тут в my_self будет лежать пойманный self

  • @ОлегБудаев-г5п
    @ОлегБудаев-г5п Рік тому

    Отличное видео

  • @Sergius-q3q
    @Sergius-q3q 9 місяців тому +1

    Ни чего не понял. Почему нельзя записать так:
    @classmethod
    def increment_count(cls):
    cls.__init__(cls, "Tom", 2)
    cls.meaw(cls)
    ?

    • @user-buser_eto_ja
      @user-buser_eto_ja 8 місяців тому +1

      Проблема в том, что cls.__init__(cls, 'Tom', 2) пытается повторно инициализировать класс, что может привести к неожиданным результатам. Обычно __init__ вызывается автоматически при создании нового объекта.
      Также, cls.meaw(cls) пытается вызвать метод meaw на классе, а не на объекте.

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

    Надеюсь вы услышите меня, на просторах русскоговорящего ютуба совсем нет информации про pytest, может вам стоит запустить серию роликов по этой теме? Я думаю будет очень актуально

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

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

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

      ​@@PythonRussian Его прям вообще нету на ютубе, либо короткие видео по 10 минут, где говорится как его скачать, но серьезного ничего нет)
      Ваш талант объяснять + актуальная тема должны дать хороший результат)

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

    Great! Im learning a course on Stepik. But I could only now understand for what these methods.
    Thanks

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

    Много подчерпнул

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

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

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

      это нормально, не торопись, ООП постепенно уложится в голове, просто продолжай подходить по-маленьку и с разных сторон

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

      @@PythonRussian спасибо, руки не опускаю, но возможно, действительно хочу все на лету, как было с предыдущими темами..
      А не получается )
      Подсел на твои видео , спасибо большое за информацию что записываешь , очень полезная инфа 👍🙂