title: Class Attribute and metaclass in dataclasses
body: <p>I have some Python classes with class attributes and metaclass:</p>
  
  <pre class="lang-py prettyprint-override"><code>from abc import ABCMeta
  
  class OldProduct(metaclass=ABCMeta):
      c_type: str
      c_brand: str
  
      def __init__(self, name:str):
          self.name = name
  
  class OldLegoBox(OldProduct):
      c_type = "Toy"
      c_brand = "Lego"
  
      def __init__(self, name:str, price:float):
          self.name = name
          self.price = price
  
  oldbox1 = OldLegoBox("Princess", 12.3)
  print(oldbox1.c_brand)
  oldbox2 = OldLegoBox("Knight", 42.3)
  print(oldbox2.c_brand)
  </code></pre>
  
  <p>I would like to use <code>dataclasses</code> to improve the code: how to deal with the class properties <code>c_type</code> and <code>c_brand</code>?</p>
  
  <p>I am thinking of the following which seems to fill my need:</p>
  
  <pre><code>from abc import ABCMeta
  from dataclasses import dataclass, field
  
  
  @dataclass
  class Product(metaclass=ABCMeta):
      c_type: str
      c_brand: str
      name: str
  
  
  @dataclass
  class LegoBox(Product):
      name: str
      price: float
      c_type: str = field(default="Toy", init=False)
      c_brand: str = field(default="Lego", init=False)
  
  
  box1 = LegoBox("Princess", 12.3)
  print(box1)
  box1.price = 1000
  box1.name = "toto"
  box1.c_brand = "some brand"
  print(box1)
  box2 = LegoBox("Knight", 42.3)
  print(box2)
  </code></pre>
  
  <p>Is there a more appropriate approach?</p>