title: Is overriding __del__() the best choice here?
body: <p>I am trying to figure out the best way to remove something, preferably without having to write in a lot of code.</p>
  
  <p>In my project I am simulating chemical compounds - I have <code>Element</code> instances bonded to other <code>Element</code> instances via a <code>Bond</code> instance.  In chemistry bonds often break, and I'd like to have a clean way to do that.  My current method is something like as follows</p>
  
  <pre><code># aBond is some Bond instance
  #
  # all Element instances have a 'bondList' of all bonds they are part of
  # they also have a method 'removeBond(someBond)' that removes a given bond 
  # from that bondList
  element1.removeBond(aBond)
  element2.removeBond(aBond)
  del aBond
  </code></pre>
  
  <p>I want to do something like</p>
  
  <pre><code>aBond.breakBond()
  
  class Bond():
      def breakBond(self):
          self.start.removeBond(self) # refers to the first part of the Bond 
          self.end.removeBond(self) # refers to the second part of the Bond 
          del self
  </code></pre>
  
  <p>Alternately, something like this would be fine</p>
  
  <pre><code>del aBond
  
  class Bond():
      def __del__(self):
          self.start.removeBond(self) # refers to the first part of the Bond 
          self.end.removeBond(self) # refers to the second part of the Bond 
          del self
  </code></pre>
  
  <p>Is any one of these ways of doing it preferable to the others, or is there some other way of doing this that I'm overlooking?</p>