title: How to raise an exception if an abstract class attribute name is mistyped
body: <p>I want to raise an exception if a user has mistyped an abstract class attribute name and a new class attribute is added instead of overriding one:</p>
  
  <pre><code>class FooAbstract:
      default_value = 'spam'  # This could be overriden
  
  class MyFoo(FooAbstract):
      defualt_value = 'bar'  # A user mistyped the name and he should be notified
  </code></pre>
  
  <p>I guess <code>difflib.SequenceMatcher</code> could be used for validating newly added variable names:</p>
  
  <pre><code>from difflib import SequenceMatcher
  
  orig_names = set([a for a in dir(FooAbstract) if not a.startswith('__')])
  new_names = set(dir(MyFoo)) - set(dir(FooAbstract))
  
  for orig_name in orig_names:
      for new_name in new_names:
          if 0.9 &lt; SequenceMatcher(a=orig_name, b=new_name).ratio() &lt; 1:
              message = f'You probably misstyped "{new_name}" (use "{orig_name}" instead)'
              raise AttributeError(message)
  </code></pre>
  
  <p>My question is where should I put this condition in order to execute it during loading of the subclass <code>MyFoo</code>?</p>