title: How to enforce method signature for child classes?
body: <p>Languages like C#, Java has method overloads, which means if child class does not implement the method with exact signature will not overwrite the parent method.</p>
  
  <p>How do we enforce the method signature in child classes in python? The following code sample shows that child class overwrites the parent method with different method signature:</p>
  
  <pre><code>&gt;&gt;&gt; class A(object):
  ...   def m(self, p=None):
  ...     raise NotImplementedError('Not implemented')
  ... 
  &gt;&gt;&gt; class B(A):
  ...   def m(self, p2=None):
  ...     print p2
  ... 
  &gt;&gt;&gt; B().m('123')
  123
  </code></pre>
  
  <p>While this is not super important, or maybe by design of python (eg. *args, **kwargs). I am asking this for the sake of clarity if this is possible.</p>
  
  <p>Please Note:</p>
  
  <p>I have tried <code>@abstractmethod</code> and the <code>ABC</code> already.</p>