title: How can I make it a requirement to call super() from within an abstract method of a metaclass?
body: <p>I have a central metaclass with abstract methods, some of which I would like to not only force them to be present in the child classes, but also want to force the child classes to explicitly call <code>super()</code> from within some of those abstract methods.</p>
  <p>Take the following simplified example:</p>
  <pre class="lang-py prettyprint-override"><code>import requests
  import abc
  
  class ParentCls(metaclass=abc.ABCMeta):
      # ...
      @abc.abstractmethod
      def login(self, username, password):
          &quot;&quot;&quot;Override with logic for logging into the service&quot;&quot;&quot;
  
      @abc.abstractmethod
      def download_file(self, resp: requests.Response) -&gt; None:
          # repeated logic goes here
          # basically, save the streaming download either to the cloud 
          # or locally depending on other class variables
          pass
  
  class ChildCls(ParentCls):
      def login(self, username, password):
          # perform the login steps, no need to call `super()` in this method
          pass
  
      def download_file(self, link):
          # download request will be different per child class
          dl_resp = requests.get(link, stream=True)
          super().download_file(dl_resp)  # how can I make an explicit super() call required?
  </code></pre>
  <p><strong>So, my questions are:</strong></p>
  <ol>
  <li>Is it possible to require <em>some</em> (not all) abstract methods to explicitly call <code>super()</code> from the child class?</li>
  <li>If yes, how would that look? If not, how come?</li>
  </ol>