跳转到主要内容

Python接口的新方法

项目描述

Python Strict Interfaces

安装

pip install strict-interfaces

设计目标

  • 尽可能严格
  • 在导入时失败
  • 不干涉 object 和/或 type 继承
  • 可集成到CPython Core
  • 无论解释器是否支持,都能“开箱即用”

功能

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

使用方法

显式实现

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))

贡献

欢迎提出拉取请求、功能请求和错误报告!

github.com/lig/python-interfaces

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

strict-interfaces-0.1.2.tar.gz (11.8 kB 查看哈希值)

上传时间 源代码

构建分发

strict_interfaces-0.1.2-py3-none-any.whl (13.0 kB 查看哈希值)

上传时间 Python 3

由以下支持