Skip to main content

Abstract/Final Patterns in Python

Project description

ihoop

Strict, immutable Abstract/Final classes

Do you like python, but wish it is was more like Julia? Do like Julia, but wish it was a language other people used? Did you read Design Patterns: Elements of Reusable Object-Oriented Software, but wish you didn't?

Meet ihoop: a tiny library that turns plain Python classes into frozen, Abstract/Final instances. Drop in Strict as a base class and get:

  • Immutability by default: once __init__ finishes, your objects are read-only.
  • Abstract or Final:
    • Abstract classes: can be subclassed, but cannot be instantiated.
    • Concrete classes: can be instantiated, but cannot be subclassed.
  • Abstract attributes, not just methods: Declare with AbstractAttribute[T]; subclasses must supply (via type hints) a real value.
  • Abstract class variables: Declare with AbstractClassVar[T]; subclasses must supply a value, which becomes immutable.
  • No dependencies: pure Python.

This package was largely copied inspired by equinox's strict=True flag. For more information see https://docs.kidger.site/equinox/pattern/.

Why is it called ihoop? Because (i) (h)ate (o)bject (o)riented (p)rogramming 😉

Example

from ihoop import Strict, AbstractAttribute, AbstractClassVar

class AbstractAnimal(Strict):
    name: AbstractAttribute[str]
    species: AbstractClassVar[str]

class Dog(AbstractAnimal):
    name: str
    species = "Canis familiaris"

    def __init__(self, name: str):
        self.name = name

>>> Dog("Fido").name
'Fido'
>>> Dog.species
'Canis familiaris'
>>> d = Dog("Rex")
>>> d.name = "Max"  # Instance attributes are immutable
AttributeError: Cannot set attribute 'name' on frozen instance of Dog. strict objects are immutable after initialization.
>>> Dog.species = "Something else"  # Class variables are also immutable once resolved
AttributeError: Cannot set frozen class variable 'species' on class 'Dog'. Class variables resolved from abstract requirements are immutable.

Sharp Edges

  • It is important to type hint all member variables at the class level. It is very possible to bypass the checking/enforcement of Strict by doing things in the __init__.

Roadmap

  • dataclass testing and integration
  • abstractclassvar: strictness for class variables
  • Package for pypi
  • ?

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

ihoop-0.1.3.tar.gz (12.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ihoop-0.1.3-py3-none-any.whl (10.5 kB view details)

Uploaded Python 3

File details

Details for the file ihoop-0.1.3.tar.gz.

File metadata

  • Download URL: ihoop-0.1.3.tar.gz
  • Upload date:
  • Size: 12.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ihoop-0.1.3.tar.gz
Algorithm Hash digest
SHA256 befe4012ddd9f5dd1611986299f54865f685b7ffd1270c2c52c51326c1e3701a
MD5 dd5e6da5b8f4ec798e6576f9df8893e0
BLAKE2b-256 81476e9a6f74264a6855fed333627db00ca1e92c26c36e3e27e5c4d128eb5201

See more details on using hashes here.

Provenance

The following attestation bundles were made for ihoop-0.1.3.tar.gz:

Publisher: publish-to-pypi.yml on lockwo/ihoop

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ihoop-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: ihoop-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 10.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ihoop-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 907684f162fadcd6942735fe8729f66568b39e733faa2240f8caf9e3fa57ac95
MD5 eceedbf13efbaf41e94eaceb3a277892
BLAKE2b-256 027cfad729596540a6a6e373f5c930c287b380997e53912cac11118ce7e3e312

See more details on using hashes here.

Provenance

The following attestation bundles were made for ihoop-0.1.3-py3-none-any.whl:

Publisher: publish-to-pypi.yml on lockwo/ihoop

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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