Python接口的新方法
项目描述
Python Strict Interfaces
安装
pip install strict-interfaces
设计目标
- 尽可能严格
- 在导入时失败
- 不干涉
object
和/或type
继承 - 可集成到CPython Core
- 无论解释器是否支持,都能“开箱即用”
功能
- 类定义上的特殊关键字
implements
- 多接口实现
- 隐式接口实现
- 受限的重载的接口继承
- 类似于
issubclass
的特殊isimplementation
函数 - 部分
issubclass
支持(见下文) - 限制创建接口实例
- 限制同时从
object
和interface
继承
使用方法
显式实现
class TestInterface(interfaces.interface):
def method(self, arg: typeT1) -> typeT2:
pass
class TestClass(interfaces.object, implements=[TestInterface]):
def method(self, arg: typeT1) -> typeT2:
pass
未实现时引发异常
class TestInterface(interfaces.interface):
def method(self, arg):
pass
class TestClass(interfaces.object, implements=[TestInterface]):
pass
隐式实现和运行时检查
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
检查是否实现了所有接口
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))
贡献
欢迎提出拉取请求、功能请求和错误报告!
项目详情
关闭
strict-interfaces-0.1.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0560785c5986b103a11495c110f153d4d5774461f2f0dbd3c8cce9e7c7e5be14 |
|
MD5 | 41355565083611de51f12c2f82557e12 |
|
BLAKE2b-256 | d52be908efc32da7b171d271c21a5b60224aa65bfbc61c3ee89f005b545d00db |
关闭
strict_interfaces-0.1.2-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 407e59ee63b3a07f5c7ca91711499acca0b6a8675c037a3bdfb031cea54693e2 |
|
MD5 | b60931e387f54b2bae066dd74b32af34 |
|
BLAKE2b-256 | 1b070220b533a43c6486ba5cf14d73eeec2152172a71c28cd55327a6d2458e9b |