title: Is it accurate, in Python, to say that we "override" the behavior of a built-in operator?
body: <p>In <em>"Think Python: How to Think Like a Computer Scientist"</em>, the author states:</p>
  
  <blockquote>
    <p>For built-in types, there are relational operators (<code>&lt;</code>, <code>&gt;</code>, <code>==</code>, etc.)
    that compare values and determine when one is greater than, less than,
    or equal to another. For programmer-defined types, we can override the
    behavior of the built-in operators by providing a method named <code>__lt__</code>,
    which stands for "less than".</p>
  </blockquote>
  
  <p>and here is the code for <code>__lt__</code> method implemented for <code>Card</code>:</p>
  
  <pre><code> # inside class Card:
      def __lt__(self, other):
          t1 = self.suit, self.rank
          t2 = other.suit, other.rank
          return t1 &lt; t2
  </code></pre>
  
  <p>But <code>__lt__</code> was not defined for <code>Card</code> before, so how do we override its behavior? We here define a new behavior for <code>__lt__</code> to make it work with <code>Card</code> objects. So, <code>__lt__</code> still works for numbers, strings, etc. (all of this is as far as I know).</p>
  
  <p>Am I wrong to say that the author (whose work I deeply admire) should not have used "override"?</p>