Классы 2

Поделиться
HTML-код
  • Опубликовано: 1 дек 2024
  • compscicenter.ru/
    Дескрипторы: что-как-зачем. Конструктор __new__, класс type и метаклассы. Наследование встроенных типов. Модули abc и collections.abc.
    Лекция №10 в курсе "Python" (осень 2015).
    Преподаватель курса: Сергей Лебедев
    Страница лекции на сайте CS центра: goo.gl/MQdKBV

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

  • @ainabcenikita5891
    @ainabcenikita5891 7 лет назад +7

    Хотел отметить что пример с проверкой на то, является ли объект obj итерируемым при помощи isinstance(obj, Iterable) на 1:18:00 является на самом деле не лучшей идеей. Стоит помнить, что если некий класс B реализует метод __getitem__, то объект класса B является итерируемым не смотря на то, что не реализует __iter__. По этой причине для проверки итерируемый объект obj или нет следует передать его методу iter(obj), возвращающему итератор и отловить исключение TypeError. В случае, если obj итерируемый, TypeError вылетать не будет.
    По мне, проверка является ли a числом isinstance(a, Number) - пример более удачный )
    Вот код:
    from collections import Iterable
    class A:
    def __init__(self, value):
    self.a = value
    def __iter__(self):
    return iter(self.a)
    class B:
    def __init__(self, value):
    self.b = value
    def __getitem__(self, item):
    return self.b[item]
    some_list = [1, 2, 3, 4, 5]
    a = A(some_list)
    b = B(some_list)
    print('a Iterable:', isinstance(a, Iterable))
    print('b Iterable:', isinstance(b, Iterable))
    try:
    iter(a)
    print('a is Iterable')
    except TypeError:
    print('a is not Iterable')
    try:
    iter(b)
    print('b is Iterable')
    except TypeError:
    print('b is not Iterable')
    #######################
    # Результаты выполнения: #
    #######################
    #
    # a Iterable: True
    # b Iterable: False
    # a is Iterable
    # b is Iterable

  • @hikkarion
    @hikkarion 7 лет назад +32

    Питон легкий язык, говорили они \|(-_-)|\

  • @Das.Kleine.Krokodil
    @Das.Kleine.Krokodil 3 года назад +1

    Метаклассы
    43:52 Что такое метакласс?
    46:36 Синтаксис использования метаклассов
    ...
    1:06:45 Применением метаклассов на практике

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

    30:08 - вместо словаря можно использовать WeakKeyDictionary из модуля weakref, тогда чрезмерного расхода памяти не будет.

  • @jeromewicks3896
    @jeromewicks3896 5 лет назад +3

    43:53 - Метаклассы

  • @Das.Kleine.Krokodil
    @Das.Kleine.Krokodil 3 года назад

    *Дескрипторы*
    00:00 Напоминание: свойства
    01:04 Переиспользование свойств
    03:08 Дескрипторы - *ДЛЯ ЧЕГО ЭТО ВСЁ*
    04:25 Дескрипторы и очень безопасный класс
    06:02 Протокол дескрипторов: _ _ get _ _
    10:22 Протокол дескрипторов: _ _ set _ _
    12:09 Протокол дескрипторов: _ _ delete _ _
    13:36 “Семантика” протокола дескрипторов
    15:22 Типы дескрипторов
    16:15 Дескрипторы и _ _ dict _ _
    18:00 Пример: дескриптор данных с методом __ get __
    21:08 Пример: дескриптор с единственным методом __ get __
    27:35 Как хранить данные в дескрипторах?
    28:55 Хранение данных в дескрипторах: атрибут дескриптора
    30:02 Хранение данных в дескрипторах: словарь
    32:01 Хранение данных в дескрипторах: атрибут экземпляра - *ТАК НУЖНО ХРАНИТЬ*
    33:23 Примеры дескрипторов: @property
    34:30 Методы класса и дескрипторы
    36:43 Статические методы и методы класса
    39:32 Примеры дескрипторов: @staticmethod и @classmethod
    42:53 Дескрипторы: резюме

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

      ну и зачем это, попытка лайкодрочерства потерпела фиаско

    • @Das.Kleine.Krokodil
      @Das.Kleine.Krokodil Год назад

      @@nicholasspezza9449 вижу тебе не знакомо понятие и цели конспекта.

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

    Своевременный комментарий: на первом слайде "Очень безопасный класс запрещает НЕПОЛОЖИТЕЛЬНЫЕ значения"
    Ну или "Разрешает только положительные" . И в теле класса в комментарии тоже лучше "only positive". Или поменять >0 на >=0
    Если я все правильно понял

  • @АлександрК-ш
    @АлександрК-ш 4 года назад

    Не работает ссылка на файл со слайдами на странице урока.

  • @Данила-м9х
    @Данила-м9х 6 лет назад +6

    Таким дураком себя после этой лекции чувствую. Почти ничего не усвоил

  • @dmitrytsmyh5971
    @dmitrytsmyh5971 4 года назад

    По моему реализация @classmethod с помощью дескриптора, какая-то невнятная.
    В доках питона написано, как это делается, там по другому и сразу понятно.

  • @danil897
    @danil897 3 года назад +1

    Да кто такой этот ваш type