This project is a learning exercise in Python metaprogramming. I wondered what Java-style interfaces would look like in Python.
For a tad more context, you can read this blog post.
pip install python-interfaces
from interface import interface
class Iterable:
def be_iterable(self):
pass
@interface(Iterable)
class Foo:
def __init__(self):
pass
# raises InterfaceException
git clone https://github.com/tyleragreen/python-interfaces.git && cd python-interfaces
virtualenv ~/.env/interface
source ~/.env/interface/bin/activate
pip install -r requirements.txt
# Since the tests live outside the package, we install the package in editable mode
pip install -e .
# Run the formatter
black .
# Run the linter
ruff check .
# Check the static types
pyright
# Run the unit tests
pytest
- Support dunder methods
- Enforce method signatures
- Require interface methods to be empty/abstract/
pass
-only