title: Mypy more specific parameter in subclass
body: <p>I want to declare a base class with an abstract method that has a typed parameter such that implementing classes can specify a more specific type for that parameter, for example:</p>
  
  <pre class="lang-py prettyprint-override"><code>from abc import ABC, abstractmethod
  
  class Job(ABC):
      pass
  
  class EasyJob(Job):
      pass
  
  class HardJob(Job):
      pass
  
  class Worker(ABC):
      @abstractmethod
      def run(self, job: Job) -&gt; None:
          raise NotImplementedError()
  
  class EasyWorker(Worker):
      def run(self, job: EasyJob) -&gt; None:
          pass
  
  class HardWorker(Worker):
      def run(self, job: HardJob) -&gt; None:
          pass
  </code></pre>
  
  <p>However, mypy understandably complains about this:</p>
  
  <pre><code>line 14: error: Argument 1 of "run" is incompatible with supertype "Worker"; supertype defines the argument type as "Job"
  line 18: error: Argument 1 of "run" is incompatible with supertype "Worker"; supertype defines the argument type as "Job"
  </code></pre>
  
  <p>Is there any way in Python to facilitate such a structure?</p>