Python Strict Interfaces
Installation
pip install strict-interfaces
Design Goals
- Be as strict as possible
- Fail on import time
- Do not mess with
objectand/ortypeinheritance - Possibility to integrate in CPython Core
- Ability to use "out of the box" regardless support in an interpreter
Features
- Special keyword
implementson the class definition - Multiple interface implementation
- Implicit interface implementation
- Interface inheritance with overloading being restricted
- Special
isimplementationfunction similar toissubclass - Partial
issubclasssupport (see below) - It's restricted to create an interface instance
- It's restricted to inherit from
objectandinterfaceat the same time
Usage
Explicit implementation
class TestInterface(interfaces.interface):
def method(self, arg: typeT1) -> typeT2:
pass
class TestClass(interfaces.object, implements=[TestInterface]):
def method(self, arg: typeT1) -> typeT2:
pass
Raises when is not implemented
class TestInterface(interfaces.interface):
def method(self, arg):
pass
class TestClass(interfaces.object, implements=[TestInterface]):
pass
Implicit implementation and run-time check
class TestInterfaceA(interfaces.interface):
def method_a(arg: typeT1) -> typeT1:
pass
class TestInterfaceB(interfaces.interface):
def method_b(arg: typeT2) -> typeT2:
pass
class TestClass:
def method_a(arg: typeT1) -> typeT1:
pass
def method_b(arg: typeT2) -> typeT2:
pass
assert interfaces.isimplementation(TestClass, (TestInterfaceA, TestInterfaceB))
isimplementation checks whether all interfaces are implemented
class TestInterfaceA(interfaces.interface):
def method_a(arg: typeT1) -> typeT1:
pass
class TestInterfaceB(interfaces.interface):
def method_b(arg: typeT2) -> typeT2:
pass
class TestClass:
def method_a(arg: typeT1) -> typeT1:
pass
# NOTE: In this case `isimplementation` behaves different than `issubclass`
assert not interfaces.isimplementation(TestClass, (TestInterfaceA, TestInterfaceB))
assert issubclass(TestClass, (TestInterfaceA, TestInterfaceB))
Contributing
Pull requests, feature requests, and bug reports are always welcome!
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
strict-interfaces-0.1.2.tar.gz
(11.8 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file strict-interfaces-0.1.2.tar.gz.
File metadata
- Download URL: strict-interfaces-0.1.2.tar.gz
- Upload date:
- Size: 11.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.20.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0560785c5986b103a11495c110f153d4d5774461f2f0dbd3c8cce9e7c7e5be14
|
|
| MD5 |
41355565083611de51f12c2f82557e12
|
|
| BLAKE2b-256 |
d52be908efc32da7b171d271c21a5b60224aa65bfbc61c3ee89f005b545d00db
|
File details
Details for the file strict_interfaces-0.1.2-py3-none-any.whl.
File metadata
- Download URL: strict_interfaces-0.1.2-py3-none-any.whl
- Upload date:
- Size: 13.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.20.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
407e59ee63b3a07f5c7ca91711499acca0b6a8675c037a3bdfb031cea54693e2
|
|
| MD5 |
b60931e387f54b2bae066dd74b32af34
|
|
| BLAKE2b-256 |
1b070220b533a43c6486ba5cf14d73eeec2152172a71c28cd55327a6d2458e9b
|