title: Is it safe to modify/remove a __dunder__ method from existing class object?
body: <p>I have a crazy lazy-loading hack in mind where a datamodel hook should be removed from a type at runtime (impacting all instances). This works correcly/as expected:</p>
  
  <pre class="lang-py prettyprint-override"><code>&gt;&gt;&gt; class Crazy: 
  ...     def __getattr__(self, attr): 
  ...         del Crazy.__getattr__ 
  ...         return 'world' 
  ... 
  &gt;&gt;&gt; c = Crazy() 
  &gt;&gt;&gt; c.hello 
  'world'
  &gt;&gt;&gt; c.hello 
  AttributeError: 'Crazy' object has no attribute 'hello'
  </code></pre>
  
  <p>I recall that resolution of dunder names monkeypatched onto an <em>instance</em> is not possible in Python, but am not sure if dynamically modifying dunder names of a <em>type</em> has any pitfalls.</p>
  
  <p>Is this behavior guaranteed/reliable in Python?</p>