Комментарии 9
Для типизации хорошо б не использовать вообще в коде Any. На SO есть ответ про то, как полностью их типизировать.
Согласен, что использование 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
Дескрипторы Python: механизм, на котором держится половина крутости языка