title: (How) Can I overrule read-only descriptors of build-in types?
body: <p>Is it possible to access an attribute that is set to not be accessed? E.g. to set a new <code>get</code> method for a <code>dict</code>?</p>
  
  <p>I am trying to get into a large and sometimes confusing code base. To get a hang of things I was trying to decorate some methods to print a log every time they are called. Python decorators (that do not actually decorate, I know) work fine to wrap our own methods but when I tried to (this time truely) decorate <code>dict.get</code> there was a problem. I expected <code>my_dict.get = my_wrapper(my_dict.get)</code> to work fine but got an <code>AttributeError</code> with the message <code>'dict' object attribute 'get' is read-only</code>.</p>
  
  <p>According to my research that means that dict uses a <a href="https://docs.python.org/3/howto/descriptor.html" rel="nofollow noreferrer">descriptor</a> to handle the assignment (i.e. raise an Exception insetad of handling it). I tried to hook into the descriptor itself or the <code>__dict__</code> of <code>dict</code> but nothing helped and I couldn't find any source that was detailed enought to be helpful either.</p>
  
  <p>Subclassing is a workaround and propably the way to go here but I allways thought that one could access and hook into anything in Python and that preventing the users from doing something is just meant to make them think twice before doing something more acurate or do the thing anyways, this time more explicid. Is that a misconception or did I miss something that makes <code>dict_instance.get = my_wrapper(dict_instance.get)</code> work?</p>
  
  <p>Python can hook into things and does not need a new class just to change a single attribute of a single instance, possibly breaking code that relies on the exact type of that instance, right?</p>