python中接口的一种新方法

strict-interfaces的Python项目详细描述


python严格接口

安装

pip install strict-interfaces

设计目标

  • 尽可能严格
  • 导入时间失败
  • 不要弄乱object和/或type继承
  • 集成到Cpyhon Core中的可能性
  • 能够使用“开箱即用”而不必考虑译员的支持

功能

  • 类定义上的特殊关键字implements
  • 多接口实现
  • 隐式接口实现
  • 限制重载的接口继承
  • 特殊的isimplementation功能类似于issubclass
  • 部分issubclass支持(见下文)
  • 仅限于创建接口实例
  • 限制同时从objectinterface继承

用法

显式实现

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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java提高机器学习Rest服务性能   java反转字符的字符串顺序,并使用构造函数将其放入LinkedList   继承为什么Java不支持在方法签名中添加“throws”?   执行DDL alter table if exists任务时发生java错误。城市   java在eclipse中使用CREATETXT并打包在jar中   java AES256与3DES 256密钥检测   具有两个相同类型字段的java JPA实体   java Webapp日志记录设置被忽略   java KeyEventDispatcher可以在一个应用程序中工作,但不能在另一个应用程序中工作   带有Swing和OpenJDK的java PinchZoom   未涉及java AspectJ注释切入点(对于任何注释类型)   java如何在FuseBAI中获取日志文件详细信息   java在Linux上将wstring转换为jstring