python中接口的一种新方法
strict-interfaces的Python项目详细描述
python严格接口
安装
pip install strict-interfaces
设计目标
- 尽可能严格
- 导入时间失败
- 不要弄乱
object
和/或type
继承 - 集成到Cpyhon Core中的可能性
- 能够使用“开箱即用”而不必考虑译员的支持
功能
- 类定义上的特殊关键字
implements
- 多接口实现
- 隐式接口实现
- 限制重载的接口继承
- 特殊的
isimplementation
功能类似于issubclass
- 部分
issubclass
支持(见下文) - 仅限于创建接口实例
- 限制同时从
object
和interface
继承
用法
显式实现
classTestInterface(interfaces.interface):defmethod(self,arg:typeT1)->typeT2:passclassTestClass(interfaces.object,implements=[TestInterface]):defmethod(self,arg:typeT1)->typeT2:pass
未实现时引发
classTestInterface(interfaces.interface):defmethod(self,arg):passclassTestClass(interfaces.object,implements=[TestInterface]):pass
隐式实现和运行时检查
classTestInterfaceA(interfaces.interface):defmethod_a(arg:typeT1)->typeT1:passclassTestInterfaceB(interfaces.interface):defmethod_b(arg:typeT2)->typeT2:passclassTestClass:defmethod_a(arg:typeT1)->typeT1:passdefmethod_b(arg:typeT2)->typeT2:passassertinterfaces.isimplementation(TestClass,(TestInterfaceA,TestInterfaceB))
isimplementation
检查是否实现了所有接口
classTestInterfaceA(interfaces.interface):defmethod_a(arg:typeT1)->typeT1:passclassTestInterfaceB(interfaces.interface):defmethod_b(arg:typeT2)->typeT2:passclassTestClass:defmethod_a(arg:typeT1)->typeT1:pass# NOTE: In this case `isimplementation` behaves different than `issubclass`assertnotinterfaces.isimplementation(TestClass,(TestInterfaceA,TestInterfaceB))assertissubclass(TestClass,(TestInterfaceA,TestInterfaceB))
贡献
拉式请求、功能请求和错误报告总是受欢迎的!
github.com/lig/python-interfaces