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