Reuse type arguments explicitly passed at runtime to a generic class before instantiating.
Project description
runtime_generics
Highly into type-safe Python code?
runtime_generics is a niche Python library that allows you to reuse type arguments explicitly passed at runtime to generic classes before instantiation. The library does two things:
- makes it possible to retrieve the type arguments passed to the generic class at runtime before the class was instantiated;
- supports basic instance/subclass checking of runtime generic classes.
- given a parametrized generic class (generic alias),
it makes every class method use generic alias
cls
instead of the origin class.
Simple example
3.12+ (PEP 695 syntax):
from runtime_generics import get_type_arguments, runtime_generic
@runtime_generic
class MyGeneric[T]:
type_argument: type[T]
def __init__(self) -> None:
(self.type_argument,) = get_type_arguments(self)
@classmethod
def whoami(cls) -> None:
print(f"I am {cls}")
my_generic = MyGeneric[int]()
assert my_generic.type_argument is int
my_generic.whoami() # I am MyGeneric[int]
3.8+:
from __future__ import annotations
from typing import Generic, TypeVar
from runtime_generics import get_type_arguments, runtime_generic
T = TypeVar("T")
@runtime_generic
class MyGeneric(Generic[T]):
type_argument: type[T]
def __init__(self) -> None:
(self.type_argument,) = get_type_arguments(self)
@classmethod
def whoami(cls) -> None:
print(f"I am {cls}")
my_generic = MyGeneric[int]()
assert my_generic.type_argument is int
my_generic.whoami() # I am MyGeneric[int]
Installation
If you want to…
…use this tool in your project 💻
You might simply install it with pip:
pip install runtime-generics
If you use Poetry, then run:
poetry add runtime-generics
…contribute to runtime_generics 🚀
[!Note] If you use Windows, it is highly recommended to complete the installation in the way presented below through WSL2.
-
Fork the runtime_generics repository on GitHub.
-
Install Poetry.
Poetry is an amazing tool for managing dependencies & virtual environments, building packages and publishing them.pipx install poetry
If you encounter any problems, refer to the official documentation for the most up-to-date installation instructions.
Be sure to have Python 3.8 installed—if you use pyenv, simply run:
pyenv install 3.8
-
Clone your fork locally and install dependencies.
git clone https://github.com/your-username/runtime_generics path/to/runtime_generics cd path/to/runtime_generics poetry env use $(cat .python-version) poetry install poetry shell pre-commit install --hook-type pre-commit --hook-type pre-push
For more information on how to contribute, check out CONTRIBUTING.md.
Always happy to accept contributions! ❤️
Legal info
© Copyright by Bartosz Sławecki (@bswck).
This software is licensed under the terms of MIT License.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for runtime_generics-2.0.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5a9309dc66dbc1152ed28c88445d1ae66dfdc51a48525b482188d26e863c4113 |
|
MD5 | f308a15b70dfc7f9d90d934003f4970a |
|
BLAKE2b-256 | e23491b44b3fa47125a3feedd5440f907b2b98f3c37b99916c121e1c77959ee3 |