Классы 2
compscicenter.ru/
Дескрипторы: что-как-зачем. Конструктор __new__, класс type и метаклассы. Наследование встроенных типов. Модули abc и collections.abc.
Лекция №10 в курсе "Python" (осень 2015).
Преподаватель курса: Сергей Лебедев
Страница лекции на сайте CS центра: goo.gl/MQdKBV
Пікірлер: 15
Питон легкий язык, говорили они \|(-_-)|\
Хотел отметить что пример с проверкой на то, является ли объект 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
30:08 - вместо словаря можно использовать WeakKeyDictionary из модуля weakref, тогда чрезмерного расхода памяти не будет.
43:53 - Метаклассы
Метаклассы 43:52 Что такое метакласс? 46:36 Синтаксис использования метаклассов ... 1:06:45 Применением метаклассов на практике
@nicholasspezza9449
Жыл бұрын
дурачок
Таким дураком себя после этой лекции чувствую. Почти ничего не усвоил
По моему реализация @classmethod с помощью дескриптора, какая-то невнятная. В доках питона написано, как это делается, там по другому и сразу понятно.
Своевременный комментарий: на первом слайде "Очень безопасный класс запрещает НЕПОЛОЖИТЕЛЬНЫЕ значения" Ну или "Разрешает только положительные" . И в теле класса в комментарии тоже лучше "only positive". Или поменять >0 на >=0 Если я все правильно понял
*Дескрипторы* 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
Жыл бұрын
ну и зачем это, попытка лайкодрочерства потерпела фиаско
@Das.Kleine.Krokodil
Жыл бұрын
@@nicholasspezza9449 вижу тебе не знакомо понятие и цели конспекта.
Не работает ссылка на файл со слайдами на странице урока.
Да кто такой этот ваш type
@ceoofthen-word8849
2 жыл бұрын
туре