Обновить

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

Согласен, что использование Any лучше избегать любыми способами. Но вот обобщённый тип для владельца дескриптора считаю оверкиллом, так как пользы в большинстве случаев он никакой не представляет. В примере из статьи, дескриптор TypedAttribute использует исключительно словарь экземпляра владельца дескриптора, то есть instance: object вполне хватит. Если от instance требуется обладать какой-то определённой логикой, то прямо так и пишем instance: HasSomeBehaviour.
И к тому же, если дескрипторы которые выступают в роли декоратора могут получить тип владельца автоматически, то вот для обычных дескрипторов - это будет выглядеть так себе.

# привет из sqlalchemy
class MyEntity(Base):
    id: Mapped[int, MyEntity] = mapped_column()
    email: Mapped[str, MyEntity] = mapped_column()
    # и так далее

Выглядит не прямо ужасно, но если mapped_column никак не будет использовать обобщённый тип владельца, то это просто захламление кода.

было очень интересно и поучительно про это прочитать. Да возможности предоставляемые данным механизмом интересные, но какова цена? Теперь уж не приходится удивлятся тому, что объекты в питоне ОЧЕНЬ медленные.

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

При присваивании p.name = "Kolnya" Python видит, что Person.name — дескриптор с методом set, и вызывает Verbose.__set__(Person.name, p, "Alice")

Хитро.

Всё сложно и куча кода.

При присваивании p.name = "Kolnya" Python видит, что Person.name — дескриптор с методом set, и вызывает Verbose.__set__(Person.name, p, "Alice").

Я понимаю — 4 часа ночи... Но, кто-то может пояснить, как взаимодействует треугольник Колян, Колня и Алиса? o_O

Статья интересная, рассмотрены достаточно подробно механизмы дескрипторов.

Спасибо!

Кому надо больше информации.

Про дескрипторы целые книги пишут:
Jacob Zimmerman "Python Descriptors Understanding and Using the Descriptor Protocol"

Ну и официальный howto есть:
https://docs.python.org/3/howto/descriptor.html

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Информация

Сайт
otus.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия
Представитель
OTUS