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.4.tar.gz (13.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.4-py3-none-any.whl (10.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: ihoop-0.1.4.tar.gz
  • Upload date:
  • Size: 13.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.4.tar.gz
Algorithm Hash digest
SHA256 f50bdf3d89f755b2005369e23d2927eb28b16a7135a1931d2012ff36cd148a66
MD5 540f7d25b5a243cb80c6221cc9fbebc3
BLAKE2b-256 1af111df2786a50e9a70daa472c2bfbfe5ac985365f3f4c0b958ce18b91ee99c

See more details on using hashes here.

Provenance

The following attestation bundles were made for ihoop-0.1.4.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.4-py3-none-any.whl.

File metadata

  • Download URL: ihoop-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 10.8 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.4-py3-none-any.whl
Algorithm Hash digest
SHA256 ceb19de4bf0e9707cd969e95072a3fa3a6807794681627ab348eb7de31d7caa2
MD5 1047e9abce319f593700683a5482e1eb
BLAKE2b-256 c8621fa732bac14aa3e732cd6a2cd75828eb0e584e6eecdb5aa09b7974e6ad8a

See more details on using hashes here.

Provenance

The following attestation bundles were made for ihoop-0.1.4-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