Uma biblioteca Python que permite definir propriedades abstratas para classes de dados, preenchendo a lacuna entre classes base abstratas (ABCs) e classes de dados.
Instale a biblioteca usando pip:
pip install dataclassabc
O decorador dataclassabc
permite o uso de propriedades abstratas dentro das classes de dados. Ele resolve propriedades abstratas definidas em uma classe base abstrata (ABC) e impõe sua implementação por meio de campos na classe de dados derivada.
Veja como você pode definir uma propriedade abstrata em uma classe base e implementá-la em uma classe de dados derivada:
from abc import ABC , abstractmethod
from dataclassabc import dataclassabc
# Define an abstract base class with an abstract property
class A ( ABC ):
@ property
@ abstractmethod
def name ( self ) -> str : ...
# Use the dataclassabc decorator to implement the abstract property in a dataclass
@ dataclassabc ( frozen = True )
class B ( A ):
# Implementing the abstract property 'name'
name : str
Usar o decorador de classe dataclass
padrão do módulo dataclasses
para implementar propriedades abstratas resultará em um TypeError, conforme mostrado abaixo:
from abc import ABC , abstractmethod
from dataclasses import dataclass
@ dataclass ( frozen = True )
class B ( A ):
name : str
# TypeError: Can't instantiate abstract class B without an implementation for abstract method 'name'
b = B ( name = 'A' )
Você pode definir propriedades abstratas mutáveis usando os decoradores @property
e @name.setter
na classe abstrata. O exemplo a seguir demonstra como definir e configurar uma propriedade mutável:
from abc import ABC , abstractmethod
from dataclassabc import dataclassabc
class A ( ABC ):
@ property
@ abstractmethod
def name ( self ) -> str : ...
@ name . setter
@ abstractmethod
def name ( self , val : str ): ...
@ dataclassabc
class B ( A ):
name : str
b = B ( name = 'A' )
# modify the mutable variable
b . name = 'B'
# Output will be b=B(name='B')
print ( f' { b = } ' )