Возможно ли получить доступ к атрибуту, который установлен как недоступный?Например, чтобы установить новый get
метод для dict
?
Я пытаюсь получить большую и иногда запутанную кодовую базу.Чтобы получить представление о вещах, я пытался украсить некоторые методы для печати журнала при каждом их вызове.Декораторы Python (которые на самом деле не украшают, я знаю) прекрасно работают, чтобы обернуть наши собственные методы, но когда я попытался (на этот раз действительно) декорировать dict.get
, возникла проблема.Я ожидал, что my_dict.get = my_wrapper(my_dict.get)
будет работать нормально, но получил AttributeError
с сообщением 'dict' object attribute 'get' is read-only
.
Согласно моим исследованиям, это означает, что dict использует дескриптор для обработки присваивания (т.е.поднять Исключение из его обращения).Я пытался подключиться к самому дескриптору или к __dict__
из dict
, но ничего не помогло, и я не смог найти ни одного источника, который был бы достаточно детализирован, чтобы быть полезным.
Подклассы - это обходной путь и, вероятно,Я всегда думал, что в Python можно получить доступ ко всему и подключиться к чему-либо, и что помешать пользователям что-то сделать - это просто заставить их подумать дважды, прежде чем делать что-то более острое или делать что-либо в любом случае, на этот раз более явно.Это неправильное представление, или я упустил что-то, что заставляет dict_instance.get = my_wrapper(dict_instance.get)
работать?
Python может влиять на вещи и ему не нужен новый класс только для изменения одного атрибута одного экземпляра, возможно, нарушая код, который полагаетсяна точный тип этого экземпляра, верно?