title: Abstract dataclass without abstract methods in Python: prohibit instantiation
body: <p>Even if a class is inherited from <code>ABC</code>, it can still be instantiated unless it contains abstract methods.</p>
  <p>Having the code below, what is the best way to prevent an <code>Identifier</code> object from being created: <code>Identifier(['get', 'Name'])</code>?</p>
  <pre><code>from abc import ABC
  from typing import List
  from dataclasses import dataclass
  
  @dataclass
  class Identifier(ABC):
      sub_tokens: List[str]
  
      @staticmethod
      def from_sub_tokens(sub_tokens):
          return SimpleIdentifier(sub_tokens) if len(sub_tokens) == 1 else CompoundIdentifier(sub_tokens)
  
  
  @dataclass
  class SimpleIdentifier(Identifier):
      pass
  
  
  @dataclass
  class CompoundIdentifier(Identifier):
      pass
  </code></pre>