A singledispatch()
for arguments that are classes annotated as specific types.
Inspired by python/cpython#100623.
While functools.singledispatch
examines the class of the first user argument,
class_singledispatch
uses the first argument as the class itself and performs
the same task with it as functools.singledispatch
.
from class_singledispatch import class_singledispatch
class T:
pass
class OtherT:
pass
@class_singledispatch
def on_class(cls: type[T], /) -> None:
print("T!")
@on_class.register
def on_other_class(cls: type[OtherT], /) -> None:
print("OtherT!")
# Useful for <3.10 without eval_type_backport -- pass the class to the decorator
# not to use the annotation from the function for the targeted class resolution
@on_class.register(SomeOtherT)
def on_some_other_class(cls: type[SomeOtherT], /) -> None:
print("SomeOtherT!")
on_class(T) # T!
on_class(OtherT) # OtherT!
on_class(SomeOtherT) # SomeOtherT!
You might simply install it with pip:
pip install class-singledispatch
Note
class-singledispatch
supports modern type hinting.
To use PEP 585
or PEP 604 annotations on Python <3.10, install
class-singledispatch[modern-type-hints]
.
If you use Poetry, then you might want to run:
poetry add class-singledispatch
Note
If you use Windows, it is highly recommended to complete the installation in the way presented below through WSL2.
-
Fork the class_singledispatch repository on GitHub.
-
Install Poetry.
Poetry is an amazing tool for managing dependencies & virtual environments, building packages and publishing them. You might use pipx to install it globally (recommended):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/class_singledispatch path/to/class_singledispatch cd path/to/class_singledispatch poetry env use $(cat .python-version) poetry install
Next up, simply activate the virtual environment and install pre-commit hooks:
poetry shell pre-commit install
For more information on how to contribute, check out CONTRIBUTING.md.
Always happy to accept contributions! ❤️
© Copyright by Bartosz Sławecki (@bswck).
This software is licensed under the terms of MIT License.