Skip to main content

Library that lets you define abstract properties for dataclasses.

Project description

Dataclass ABC

Library that lets you define abstract properties for dataclasses.

Installation

pip install dataclass-abc

Usage

The dataclassabc class decorator resolves the abstract properties overwritten by a field.

from abc import ABC, abstractmethod

from dataclassabc import dataclassabc

class A(ABC):
    @property
    @abstractmethod
    def name(self) -> str:
        ...

@dataclassabc(frozen=True)
class B(A):
    name: str        # overwrites the abstract property 'name' in 'A'

Define mutable variables

Define a mutable variable name in the abstract class A by using the name.setter decorator.

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):
        ...

    def set_name(self, val: str):
        self.name = val

@dataclassabc
class B(A):
    name: str

b = B(name='A')
b.set_name('B')

Example

The example implements the code snippets taken from RealPython with abstract properties.

Design pattern

This library suggests the following design pattern:

  • mixins - a mixin is an abstract class that implements data as abstract properties and methods based on the abstract properties.
  • classes - an abstract class inherits from one or more mixins (see City or CapitalCity in the example). This class is used for pattern matching, e.g. using isinstance method.
  • impl - an implementation class implements the abstract properties. (see CityImpl or CapitalCityImpl in the example). This class is decorated with dataclassabc and resolve_abc_prop and should always be called through an initialize function.
  • init - an initialize function (or constructor function) initializes an implementation class.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dataclass-abc-0.0.8.tar.gz (7.3 kB view hashes)

Uploaded Source

Built Distribution

dataclass_abc-0.0.8-py3-none-any.whl (7.6 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page