title: Add optional param to base class function, ignore in subclass
body: <p>If I have a class hierarchy and use it like follows, including a third-party subclass that I can't change</p>
  <pre class="lang-py prettyprint-override"><code>class Base:
    def doit(self):
      pass
  
  class Sub(Base):
    def doit(self):
      print('hi')
  
  class SubInThirdPartyLibrary(Base):
    def doit(self):
      print('hi from library')
  
  def doit(x: Base):
    x.doit()
  
  doit(Sub())
  doit(SubInThirdPartyLibrary())
  </code></pre>
  <p>Is there any way I can add an optional parameter to the base class, use that in the subclass, without breaking the third-party class?</p>
  <pre class="lang-py prettyprint-override"><code>class Base:
    def doit(self, msg: str = 'hi'):
      pass
  
  class Sub(Base):
    def doit(self, msg: str = 'hi'):
      print(msg)
  
  class SubInThirdPartyLibrary(Base):
    def doit(self):  # This isn't mine, I can't add the parameter here but want it to keep working.
      print('hi from library')
  
  def doit(x: Base):
    x.doit(hi='hello')
  
  doit(Sub())
  doit(SubInThirdPartyLibrary())  # TypeError: doit() takes 1 positional argument but 2 were given
  </code></pre>