跳转到主要内容

Python接口

项目描述

zope.interface

Latest Version Supported Python versions https://github.com/zopefoundation/zope.interface/actions/workflows/tests.yml/badge.svg Documentation Status

此包旨在在任何Python项目中独立重用。由Zope Toolkit项目维护。

此包提供了Python的“对象接口”实现。接口是一种将对象标记为符合特定API或合同机制。因此,此包可以被视为Python中支持设计合同方法的实现。

有关详细文档,请参阅https://zopeinterface.readthedocs.io/en/latest/

变更

7.0.3 (2024-08-27)

  • 修复Python < 3.12的断言“memb->type == T_PYSSIZET”失败。

7.0.2 (2024-08-26)

  • 修复C模块初始化中的引用计数错误(7.0中损坏)。

7.0.1 (2024-08-06)

  • 修复ObjectSpecificationDescriptor的可继承性(7.0中损坏)。

7.0 (2024-08-06)

  • 为Python >= 3.11启用基于堆的类型(PEP 384)。

  • 采用多阶段模块初始化(PEP 489)。

  • 停止支持Python 3.7。

6.4.post2 (2024-05-24)

  • 发布缺少的Windows轮子,第二次尝试。

6.4.post1 (2024-05-23)

  • 发布缺失的Windows轮子。(#295

6.4.post0(2024-05-22)

  • 6.4版本的sdist被上传到PyPI,名称为zope_interface-6.4.tar.gz而不是zope.interface-6.4-py2.tar.gz,后者不能被zc.buildout安装。这次发布是对6.4版本的重新发布,带有正确的sdist名称。(#298

6.4 (2024-05-15)

  • 调整Python 3.13b1中的不兼容更改。(#292

  • 在GHA上构建Windows轮子。

6.3 (2024-04-12)

  • 从3.13a6开始,初步支持Python 3.13。

6.2 (2024-02-16)

  • 从3.13a3开始,初步支持Python 3.13。

  • 支持使用管道(|)语法为typing.Union添加支持。(#280

6.1 (2023-10-05)

  • 为Python 3.12构建Linux二进制轮子。

  • 添加对Python 3.12的支持。

  • 修复非最终版本文档构建问题。

6.0 (2023-03-17)

  • 为Python 3.11构建Linux二进制轮子。

  • 停止支持Python 2.7、3.5、3.6。

  • 修复Python 3.11上的测试弃用警告。

  • 从3.12a5开始,初步支持Python 3.12。

  • 删除

    • zope.interface.implements

    • zope.interface.implementsOnly

    • zope.interface.classProvides

5.5.2 (2022-11-17)

  • 支持在macOS上构建arm64轮子。

5.5.1 (2022-11-03)

  • 支持Python 3.11的最终版本。

5.5.0 (2022-10-10)

  • 支持Python 3.10和3.11(从3.11.0rc2开始)。

  • 添加缺失的Trove分类器,显示对Python 3.9的支持。

  • zope.interface.interfaces.__all__添加一些条目。

  • 在C代码中禁用不安全的数学优化。见拉取请求262

5.4.0 (2021-04-15)

  • __providedBy__描述符的C实现停止忽略实例__provides__时引发的错误。现在它表现得像Python版本一样,只捕获AttributeError。以前的行为可能导致递归和错误时解释器崩溃。见问题239

  • 更新各种对象的repr()str()以使其更短、更有信息量。在许多情况下,repr()现在可以评估为产生相等对象的某些内容。例如,以前打印为<implementedBy builtins.list>的现在显示为classImplements(list, IMutableSequence, IIterable)。见问题236

  • 使Declaration.__add__(如在implementedBy(Cls) + ISomething中)在两个参数共享接口继承层次结构中的重叠部分时,更努力地保持一致的解析顺序。以前,右侧总是放在解析顺序的末尾,这很容易产生无效的顺序。见问题193

5.3.0 (2020-03-21)

  • 自5.3.0a1以来没有更改

5.3.0a1(2021-03-18)

  • 改进zope.interface.Provides的repr,以消除对所提供内容的歧义。这特别有助于诊断IRO问题。

  • 允许BaseAdapterRegistry的子类(包括AdapterRegistryVerifyingAdapterRegistry)控制数据结构。这允许持久化实现(例如基于ZODB的实现)选择更可扩展的选项(例如,BTrees而不是dicts)。见问题224

  • 修复了在BaseAdapterRegistry中存在的引用计数问题,该问题可能导致即使所有提供该接口的实用程序/适配器/订阅者都被移除后,接口的引用仍然存在。这主要是一个持续实现的问题。请注意,这仅修正了未来的问题,并不能解决已经损坏的引用计数。请参阅问题227

  • 添加了方法BaseAdapterRegistry.rebuild()。这可以用来修复上面提到的引用计数问题,也可以在自定义数据类型更改时更新数据结构。

  • 添加了接口方法IAdapterRegistry.subscribed()和实现BaseAdapterRegistry.subscribed(),用于直接查询已注册的订阅者。请参阅问题230

  • 添加了维护方法Components.rebuildUtilityRegistryFromLocalCache()。大多数用户不需要此方法,但如果怀疑Components.utilities注册表与Components对象本身不同步(这可能发生在面对故障的持续Components实现中),则可能很有用。

  • 修复了ProvidesClassProvides描述符,以防止重复接口(那些已经由底层类或元类实现的接口)产生不一致的解析顺序。这与5.1.0中@implementer的变化类似,并解决了与zope.proxyzope.location的不一致解析顺序。请参阅问题207

5.2.0 (2020-11-05)

  • 添加文档部分持久性和等价性#218)。

  • 创建arm64轮子。

  • 添加对Python 3.9的支持。

5.1.2 (2020-10-01)

  • 确保在验证不变量时只调用每个不变量一次。以前,由于在接口中定义不变量时,它会在所有继承自该接口的接口中找到,所以不变量可能会被多次调用。

5.1.1 (2020-09-30)

  • 修复了IAdapterRegistry.subscribesubscriptionssubscribers的方法定义。以前,它们都被定义为接受一个name关键字参数,但订阅者没有名称,该接口的实现不接受该参数。请参阅问题208

  • 修复了C优化的潜在引用泄露。以前,动态创建唯一Specification对象的应用程序(例如,在动态类上使用@implementer)可能会注意到随着时间的推移小对象的增长,从而导致垃圾收集时间增加。请参阅问题216

5.1.0 (2020-04-08)

  • @implementer(*iface)classImplements(cls, *iface)忽略冗余接口。如果类已经通过继承实现了接口,就不再为cls特别重新声明。这解决了许多不一致的解析顺序问题,同时仍然允许为了可读性和维护目的声明接口。请参阅问题199

  • 删除所有裸露的except:语句。之前,当访问特殊属性如__provides____providedBy____class____conform__时,此包会将此类访问包装在裸露的except:语句中,意味着许多错误可能无声地通过;通常这会导致采用回退路径,有时(如使用providedBy())结果可能是无意义的。这在那些属性用描述符实现时尤其如此。现在,只有AttributeError被捕获。这使得错误更加明显。

    显然,这意味着某些异常的传播方式将与之前不同。特别是,当出现循环包含时,Acquisition抛出的RuntimeError现在将被传播。之前,在适配这样的损坏对象时,通常结果是TypeError,但现在它将是一个更具有信息性的RuntimeError

    此外,ZODB错误如POSKeyError现在可以被传播,而之前它们会被此包忽略。

    请参阅问题200

  • 要求InterfaceClass的第二个参数(bases)是一个元组。这仅在直接使用InterfaceClass动态创建新接口时才有意义。之前,允许单个接口,但工作不正确。现在它与type保持一致,并需要元组。

  • 允许接口定义自定义的__adapt__方法。这实现了PEP 246适配协议的另一部分:如果对象了解接口,它们可以已经实现了__conform__;现在,如果接口了解特定对象,它们可以实现__adapt__。对于未提供自定义__adapt__方法的接口,没有性能损失。

    这包括添加新方法或使用新的@interfacemethod装饰器覆盖现有接口方法的能力。

    请参阅问题3

  • 使API如implementedBydirectlyProvidedBy返回的对象(这些对象实现或提供没有接口)的内部单例对象更加不可变。之前,内部缓存可能被修改。请参阅问题204

5.0.2 (2020-03-30)

  • 确保没有实现接口的对象(如直接子类object)的__iro_____sro___中仍包括Interface本身。这修复了适配器注册表中此类对象的查找,当适配器注册为Interface时。请参阅问题197

5.0.1 (2020-03-21)

  • 确保InterfaceClass的解析顺序一致。请参阅问题192

  • 确保在CPython 2中 collections.OrderedDict 的解析顺序一致性。(Python 3和PyPy上已经是一致的)。

  • 修复对 ZOPE_INTERFACE_STRICT_IRO 环境变量的处理。之前,与文档不符地读取了 ZOPE_INTERFACE_STRICT_RO。请参阅 问题 194

5.0.0 (2020-03-19)

  • 使API如 implementedBydirectlyProvidedBy 返回的内部单例对象不可变。之前,它是完全可变的,并允许改变其 __bases___。这可能会在病态的边缘情况下导致错误的结果。请参阅 问题 158

  • 在运行时支持 PURE_PYTHON 环境变量,而不仅仅是轮子在构建时。值为0强制使用C扩展(即使在PyPy上),如果它们不存在则失败。任何其他值强制使用Python实现,忽略C扩展。请参阅 PR 151

  • InterfaceClass 中缓存 __hash__ 方法的结果作为速度优化。该方法被频繁调用(例如,Plone 5.2启动期间调用了几百上千次)。由于哈希值永远不会改变,它可以被缓存。这提高了测试性能,从0.614秒下降到0.575秒(1.07倍更快)。在实际的Plone情况下,重新索引索引从402秒下降到320秒(1.26倍更快)。请参阅 PR 156

  • 将C类 SpecificationBase 及其子类 ClassProvidesBase 中的实现属性存储在其结构中,而不是它们的实例字典中。这消除了对未记录的私有C API函数的使用,并有助于使某些实例需要的内存更少。请参阅 PR 154

  • 根据对Zope(3)和Plone代码库中用法模式的观察,以其他方式减少内存使用。

    • 没有依赖项的规范很常见(超过50%),因此除非我们需要,否则不要分配 WeakKeyDictionary

    • 同样,标记值相对较少,因此在它们被使用之前不要分配一个字典来保存它们。

    • 在更常见的地方使用 __slots___ 或其C等效的 tp_members。请注意,这将移除在某些对象上设置任意实例变量的能力。请参阅 PR 155

    这次发布的变化导致在加载约6000个定义约2200个接口的模块后,内存减少了7%。

  • 移除对未初始化接口的哈希支持。这只能通过子类化 InterfaceClass 来完成。这自2011年(3.6.5)首次添加以来已生成警告。请在尝试哈希或排序之前,调用 InterfaceClass 构造函数或以其他方式在子类中设置适当的字段。请参阅 问题 157

  • zope.interface.declarations.Implements 中移除不必要的 __hash__ 方法覆盖。在 Py-Spy 中观察 ZCatalog 的 reindex 索引过程,经过 10k 次采样后,.adapter._lookup 的时间从 27.5 秒减少到 18.8 秒(约 1.5 倍更快)。整体重新索引索引时间从 369 秒缩短到 293 秒(1.26 倍更快)。请参阅 PR 161

  • 通过在接口适配过程中的(部分)忽略所有异常(而不仅仅是 AttributeError),使 Python 实现更接近 C 实现。请参阅 问题 163

  • .adapter._lookup.adapter._lookupAll.adapter._subscriptions 中进行微优化:在进入循环之前将 components.get 载入局部变量,可以消除循环中的字节码“LOAD_FAST 0 (components)”。在 Plone 中,运行所有测试时,“owntime”的平均加速为 ~5x。请参阅 PR 167

  • 将所有模块中的 __all__ 声明添加。这有助于自动完成和文档工具,并导致结果更整洁。不推荐使用通配符(“*”),可能会受到影响。请参阅 问题 153

  • 修复 verifyClassverifyObject 以处理内置类型,如 dict,这些类型有接受无默认值的可选、未命名的参数的方法,如 dict.pop。在 PyPy3 上,验证是严格的,但在 PyPy2(以及所有版本的 CPython)上,这些方法无法进行验证,将被忽略。请参阅 问题 118

  • 更新常用接口 IEnumerableMappingIExtendedReadMappingIExtendedWriteMappingIReadSequenceIUniqueMemberWriteSequence,不再要求方法,这些方法已在 Python 3 中删除,例如 __setslice___。现在,在所有版本的 Python 中,dictlisttuple 分别正确验证为 IFullMappingISequenceIReadSequence

  • AttributeMethod 添加可读的 __str_____repr___。这些包含定义接口和属性的名称。对于方法,它还包括签名。

  • 更改由 verifyObjectverifyClass 抛出的错误字符串。它们现在包含更多可读信息,并排除了多余的行和空格。请参阅 问题 170

  • 如果候选对象有多处可检测到的违规行为,则 verifyObjectverifyClass 现在将报告所有错误。之前它们只报告第一个错误。请参阅 问题

    与上面一样,如果存在多个错误,这将破坏依赖于错误消息确切输出的消费者。

  • 添加 zope.interface.common.collectionszope.interface.common.numberszope.interface.common.io。这些模块分别基于标准库中定义的 collections.abcnumbersio 模块中的 ABC 定义接口。导入这些模块会使与这些 ABC 注册的标准库具体类声明相应的接口。参见 问题 138

  • 添加 zope.interface.common.builtins。此模块定义了常见内置类型的接口,例如 ITextStringIByteStringIDict 等。这些接口扩展了来自 collectionsnumbers 的适当接口,并且标准库类在导入此模块后实现它们。这旨在替代第三方包,如 dolmen.builtins。参见 问题 138

  • 使 providedBy()implementedBy() 尊重 super 对象。例如,如果类 Derived 实现 IDerived 并扩展 Base,而 Base 又实现 IBase,那么 providedBy(super(Derived, derived)) 将返回 [IBase]。之前它将返回 [IDerived](通常,在没有 super 的情况下,它将返回任何返回值)。

    与此更改一起,适配器注册表在将其传递给工厂之前会将 super 对象解包到其 __self___ 中。这意味着现在 component.getAdapter(super(Derived, self), ITarget) 是有意义的。

    参见 问题 11

  • 修复了低级适配器注册表查找函数中潜在的解释器崩溃。参见问题 11。

  • 采用 Python 的标准 C3 解决方案顺序 来计算接口的 __iro____sro__,并对支持接口中常见但 Python 类不允许的额外情况进行调整。之前使用了一种没有特别保证的自定义排序。

    这具有许多有益的特性,包括基接口和基类倾向于出现在解决方案顺序的末尾而不是开头。一般来说,解决方案顺序应该更可预测和一致。

    C3 顺序强制实施一些约束,以便能够保证合理的顺序。zope.interface 的旧版本没有实施类似约束,因此可以创建与 C3 约束不一致的接口和声明。在这种情况下,zope.interface 仍然会产生与旧顺序相同的解决方案顺序,但不会保证完全符合 C3。将来,可能默认强制实施 C3 顺序。

    一组环境变量和模块常量允许控制此新行为的一些方面。可以请求有关遇到的不一致解决方案顺序的警告,甚至禁止它们。C3 解决方案顺序与之前顺序之间的差异可以记录下来,并且在极端情况下,仍然可以使用旧顺序(此功能将在未来删除)。有关详细信息,请参阅 zope.interface.ro 的文档。

  • 使接口中继承的标记值尊重解决方案顺序(__iro__),就像方法和属性查找一样。以前,标记值可能会给出不一致的结果。参见 问题 190

  • getDirectTaggedValue(及相关方法)添加到接口中,以便可以访问标记值而不管继承关系。请参阅 问题 190

  • 确保 Interface 总是位于 __iro____sro__ 的最后一个位置。这通常是正确的,但如果未实现任何接口的类是类继承层次结构的一部分,Interface 可能会被赋予过高的优先级。请参阅 问题 8

  • 在 C 语言中实现 Interface 对象的排序、相等性和散列。在微基准测试中,这使得这些操作的速度提高了 40% 到 80%。这相当于查询适配器时速度提高了 20%。

    请注意,这改变了某些实现细节。特别是,InterfaceClass 现在有一个非默认的元类,并且强制 InterfaceClass 实例的 __module__ 是只读的。

    请参阅 PR 183

4.7.2 (2020-03-10)

  • 移除已弃用的 setuptools 功能。请参阅 问题 30

4.7.1 (2019-11-11)

  • 在文档中使用 Python 3 语法。请参阅 问题 119

4.7.0 (2019-11-11)

  • 停止支持 Python 3.4。

  • 修改接口中的 queryTaggedValuegetTaggedValuegetTaggedValueTags。现在它们通过 __bases__ 包含继承的值。请参阅 PR 144

  • 增加对 Python 3.8 的支持。

4.6.0 (2018-10-23)

  • 增加对 Python 3.7 的支持。

  • 修复在 Python 3 中静态方法上的类对象 verifyObject。请参阅 问题 126

4.5.0 (2018-04-19)

  • 停止支持 3.3,通过 setup.py 避免意外依赖中断。请参阅 PR 110

  • 允许注册和注销实例方法作为监听器。请参阅 问题 12PR 102

  • 同步并简化 zope/__init__.py。请参阅 问题 114

4.4.3 (2017-09-22)

  • 避免在接口定义中使用 Python 3.x 类型提示添加 __annotations__ 属性时抛出异常。请参阅 问题 98

  • 修复 C 扩展在释放项时可能出现的罕见崩溃的可能性。请参阅 问题 100

4.4.2 (2017-06-14)

  • 修复了存储 zope.component.persistentregistry.PersistentRegistry 实例的回归。请参阅 问题 85

  • 修复可能导致 Components 的实用工具注册缓存不同步的回归。请参阅 问题 93

4.4.1 (2017-05-13)

  • 简化实用工具注册数据的缓存。除了简化之外,还避免了在具有持久注册表的测试中检查泄漏时出现的虚假测试失败。请参阅 pull 84

  • 当向适配器注册方法传递非文本名称时,抛出 ValueError:防止查找缓存损坏。

4.4.0 (2017-04-21)

4.3.3 (2016-12-13)

  • 更正文档中的拼写错误和 ReST 格式错误。

  • 为适配器注册添加 API 文档。

  • 确保 LICENSE.txt 文件包含在构建的 wheel 中。

  • 修复 Py3k 上 C 优化问题。请参见 Python 错误报告:[http://bugs.python.org/issue15657](http://bugs.python.org/issue15657) ([https://github.com/zopefoundation/zope.interface/issues/60](https://github.com/zopefoundation/zope.interface/issues/60))

4.3.2 (2016-09-05)

  • 修复 implementedBy 对象和代理的相等性测试。([https://github.com/zopefoundation/zope.interface/issues/55](https://github.com/zopefoundation/zope.interface/issues/55))

4.3.1 (2016-08-31)

  • 支持不可哈希的 Components 子类。([https://github.com/zopefoundation/zope.interface/issues/53](https://github.com/zopefoundation/zope.interface/issues/53))

4.3.0 (2016-08-31)

  • 添加了对 implementedBy 返回的对象进行排序的能力。这与接口类的排序方式兼容,因此可以用于像 BTrees 这样的有序容器中。([https://github.com/zopefoundation/zope.interface/issues/42](https://github.com/zopefoundation/zope.interface/issues/42))

  • setuptools 设置为 setup.py 的强制依赖。([https://github.com/zopefoundation/zope.interface/issues/13](https://github.com/zopefoundation/zope.interface/issues/13))

  • Components.registerUtilityComponents.unregisterUtility 中的线性算法(O(n))改为字典查找(O(1))以处理可哈希组件。这显著提高了在大注册表中操作实用工具所需的时间,但代价是额外的内存使用。([https://github.com/zopefoundation/zope.interface/issues/46](https://github.com/zopefoundation/zope.interface/issues/46))

4.2.0 (2016-06-10)

  • 支持 Python 3.5

  • 停止支持 Python 2.6 和 3.2。

4.1.3 (2015-10-05)

  • 修复在 Python 3.5 上没有 C 编译器时安装的问题。([https://github.com/zopefoundation/zope.interface/issues/24](https://github.com/zopefoundation/zope.interface/issues/24))

4.1.2 (2014-12-27)

  • 添加对 PyPy3 的支持。

  • 移除 Python3.x 中已弃用的 unittest 断言。

  • 添加 zope.interface.document.asReStructuredText,它使用 ReST 双反引号标记格式化接口生成的文本。

4.1.1 (2014-03-19)

  • 添加对 Python 3.4 的支持。

4.1.0 (2014-02-05)

  • boostrap.py 更新到版本 2.2。

  • 添加 @named(name) 声明,指定组件名称,因此注册时不需要传递。

4.0.5 (2013-02-28)

  • 修复一个装饰方法导致在 verifyClass() 上出现假阳性失败的错误。

4.0.4 (2013-02-21)

  • 修复在移植 zope.traversing 时暴露的错误。在循环中,循环体修改了一个弱引用字典,导致 RuntimeError 错误。

4.0.3 (2012-12-31)

  • 完善 PyPI Trove 分类器。

4.0.2 (2012-11-21)

  • 添加对 Python 3.3 的支持。

  • 恢复在缺少 setuptools 的情况下安装包的能力。

  • LP #1055223:修复依赖于字典顺序并随机失败的测试。

4.0.1 (2012-05-22)

  • 删除对“类建议”APIs(这些APIs在Python 2.x下仍然弃用,在Python 3.x下仍然抛出异常,但在Python 2.x下不再发出警告)的显式弃用警告。

4.0.0 (2012-05-16)

  • 自动构建 Sphinx HTML 文档,并通过 tox 运行 doctest 片段。

  • 弃用 zope.interface.declarations 中的“类建议”APIs:implementsimplementsOnlyclassProvides。取而代之的是,首选等效的类装饰器:@implementer@implementer_only@provider。使用已弃用API的代码在Py3k下可能无法按预期工作。

  • 在Py3k下安装时,删除使用‘2to3’及其相关修复程序。现在代码在一个“兼容子集”中,支持Python 2.6、2.7和3.2,包括与2.7语言规范兼容的PyPy 1.8版本。

  • 删除对 Python 2.4 / 2.5 / 3.1 的显式支持。

  • 添加对 PyPy 的支持。

  • 添加对使用 toxjenkins 的持续集成的支持。

  • 添加“setup.py dev”别名(运行< span class="docutils literal">setup.py develop并安装< span class="docutils literal">nose和< span class="docutils literal">coverage)。

  • 添加“setup.py docs”别名(安装< span class="docutils literal">Sphinx及其依赖项)。

  • 将所有通过doctests完成的先前unittest覆盖率替换为unittests。doctests已移至< span class="docutils literal">docs部分,并作为Sphinx集合进行管理。

  • LP #910987:确保zope.interface.adapter.LookupBaselookup方法的语义在C和Python实现中相同。

  • LP #900906:避免由于Python 3.3中添加的新__qualname__属性而引发的异常(有关原因,请参阅PEP 3155)。感谢Antoine Pitrou提供的补丁。

3.8.0 (2011-09-22)

  • 新增模块< span class="docutils literal">zope.interface.registry。这是从< span class="docutils literal">zope.component.registry中移出的代码,实现了基本非持久性组件注册为< span class="docutils literal">zope.interface.registry.Components。为了使仅依赖于基本组件注册的系统(如Pyramid)能够移植到Python 3,而无需移植整个< span class="docutils literal">zope.component包,已将该类从< span class="docutils literal">zope.component移至。在< span class="docutils literal">zope.component中留下了向后兼容的导入适配器,因此此更改不会破坏现有代码。

  • 新增< span class="docutils literal">tests_require依赖项:< span class="docutils literal">zope.event以测试Components实现发送的事件。< span class="docutils literal">zope.interface包没有对< span class="docutils literal">zope.event的硬依赖,但如果< span class="docutils literal">zope.event可导入,则当调用< span class="docutils literal">zope.interface.registry.Components实例的方法时,它将发送组件注册事件。

  • 新增接口以支持添加< span class="docutils literal">zope.interface.registry.Components:< span class="docutils literal">ComponentLookupError、< span class="docutils literal">Invalid、< span class="docutils literal">IObjectEvent、< span class="docutils literal">ObjectEvent、< span class="docutils literal">IComponentLookup、< span class="docutils literal">IRegistration、< span class="docutils literal">IUtilityRegistration、< span class="docutils literal">IAdapterRegistration、< span class="docutils literal">ISubscriptionAdapterRegistration、< span class="docutils literal">IHandlerRegistration、< span class="docutils literal">IRegistrationEvent、< span class="docutils literal">RegistrationEvent、< span class="docutils literal">IRegistered、< span class="docutils literal">Registered、< span class="docutils literal">IUnregistered、< span class="docutils literal">Unregistered、< span class="docutils literal">IComponentRegistry和< span class="docutils literal">IComponents。

  • 不再兼容Python 2.4(在2.5、2.6、2.7和3.2下进行测试)。

3.7.0 (2011-08-13)

  • 将3.6.2 - 3.6.5中的更改移动到新的3.7.x版本线。

3.6.7 (2011-08-20)

  • 修复在x86-64平台上测试接口丰富比较时出现的间歇性失败。

3.6.6 (2011-08-13)

  • LP #570942:现在正确比较来自不同模块但具有相同名称的接口。

    注意:此修复比3.6.3中应用的修复更具侵入性/破坏性:我们只修复了底层的cmp-alike函数,而不是添加其他“丰富比较”函数。

  • 将代码恢复为与3.6.1一起发布的软件,以“稳定”的3.6版本分支。

3.6.5 (2011-08-11)

  • LP #811792:解决某些zope.interface.interface.InterfaceClass子类中的错误行为,这些子类在初始化< span class="docutils literal">__module__和< span class="docutils literal">__name__之前调用< span class="docutils literal">__hash__。在这种情况下,该修复返回一个固定的常量哈希,并发出一个< span class="docutils literal">UserWarning。

  • LP #804832:在PyPy下,< span class="docutils literal">zope.interface不应构建其C扩展。同时,防止在Jython下尝试构建它。

  • 添加tox.ini以简化xplatform测试。

  • 修复在Py3K下测试时发出的测试弃用警告。

3.6.4 (2011-07-04)

  • LP 804951:在Python 3.x下,InterfaceClass实例是不可哈希的。

3.6.3 (2011-05-26)

  • LP #570942:现在正确比较来自不同模块但具有相同名称的接口。

3.6.2 (2011-05-17)

  • 将详细的文档从PyPI页面移除,改为链接到http://docs.zope.org/zope.interface

  • 修复在Python 3.2下使用zope.testrunner运行测试时出现的小问题。

  • LP # 675064:在Python 3下指定C优化模块初始化的返回值类型。未声明的值导致警告,并在某些64位架构上引发段错误。

  • 当在Python 3下运行时,如果未安装Distutils,则setup.py会引发RuntimeError。

3.6.1 (2010-05-03)

  • 更改日志中的非ASCII字符导致Python 3系统上的3.6.0不可卸载(非UTF-8默认编码)。

  • 修复GCC 4.3.3下的编译器警告。

3.6.0 (2010-04-29)

  • LP #185974:在Specification.changed内部清除Specificaton.get使用的缓存。感谢Jacob Holm提供的补丁。

  • 添加对Python 3.1的支持。贡献者

    Lennart Regebro Martin v Loewis Thomas Lotze Wolfgang Schnerring

    3.1支持完全向后兼容。然而,在Python 2.X下使用的实现语法在3.X下不工作,因为它依赖于元类的实现方式,而这已经发生了变化。取而代之的是,它现在支持装饰器语法(同样适用于Python 2.X)

    class Foo:
        implements(IFoo)
        ...

    现在也可以这样写

    @implementer(IFoo):
    class Foo:
        ...

    zope.fixers包中有2to3修复器可用,可以自动执行此更改。

  • Python 2.3不再受支持。

3.5.4 (2009-12-23)

  • 使用标准Python doctest模块而不是zope.testing.doctest,因为zope.testing.doctest已被弃用。

3.5.3 (2009-12-08)

3.5.2 (2009-07-01)

  • BaseAdapterRegistry.unregister, unsubscribe:在删除某些内容时,从数据结构中删除空的部分。这避免了留下可能被调用应用程序删除的全局对象(接口)的引用。

3.5.1 (2009-03-18)

  • verifyObject:使用getattr代替hasattr来测试对象属性,以便让除AttributeError之外的其他异常传播给调用者

  • 将基于Sphinx的文档构建添加到包buildout配置中。在buildout之后使用bin/docs命令。

  • 稍微改进包描述。统一更改日志条目格式。

  • 将包的邮件列表地址更改为zope-dev at zope.org,因为zope3-dev at zope.org现在已停用。

3.5.0 (2008-10-26)

  • 修复了_zope_interface_coptimizations声明的错误,它不是一个顶级包。

  • 为odd.py模块添加一个DocTestSuite,以便运行其测试。

  • 允许在Jython上引导。

  • 修复https://bugs.launchpad.net/zope3/3.3/+bug/98388:ISpecification缺少__iro__的声明。

  • 添加可选的代码优化支持,允许C代码优化构建失败(Jython)。

  • _flatten替换为非递归实现,有效地使其快3倍。

3.4.1 (2007-10-02)

  • 修复了一个设置错误,该错误阻止在没有setuptools的系统上从源代码安装。

3.4.0 (2007-07-19)

  • 3.4.0的最终发布版本。

3.4.0b3(2007-05-22)

  • 在检查对象是否已注册时,使用身份比较,以允许使用挑剔的自定义比较方法进行注册。

3.3.0.1 (2007-01-03)

  • 引用了OverflowWarning,它在Python 2.5中消失了,条件引用。

3.3.0 (2007/01/03)

新功能

  • 重构适配器查找算法,使其更加简单和快速。

    此外,在C中实现更多的适配器查找逻辑,使应用程序代码的调试更容易,因为要遍历的基础结构代码更少。

  • 将未声明接口的对象视为声明了提供zope.interface.Interface

  • 添加了一些更丰富的新的适配器注册接口,提供了更大的控制和内省。

  • 向zope.interface添加了一个新的接口装饰器,允许在定义时设置接口上的标记值(见zope.interface.taggedValue)。

错误修复

  • 多适配器查找中有时会导致返回错误的适配器。

3.2.0.2 (2006-04-15)

  • 修复打包错误:"package_dir" 必须是一个 相对 路径。

3.2.0.1 (2006-04-14)

  • 打包更改:在 "sdist" 构建中抑制包含 "setup.cfg"。

3.2.0 (2006-01-05)

  • 对应于 Zope 3.2.0 发布版中作为部分提供的 zope.interface 包的版本。

3.1.0 (2005-10-03)

  • 对应于 Zope 3.1.0 发布版中作为部分提供的 zope.interface 包的版本。

  • 使属性解析顺序与组件查找顺序一致,即新式类的 MRO 语义。

  • 废弃 "isImplementedBy" 和 "isImplementedByInstancesOf" API,转而使用 "implementedBy" 和 "providedBy"。

3.0.1 (2005-07-27)

  • 对应于 Zope X3.0.1 发布版中作为部分提供的 zope.interface 包的版本。

  • 修复 James Knight 报告的错误,该错误导致适配器注册表偶尔无法反映声明更改。

3.0.0 (2004-11-07)

  • 对应于 Zope X3.0.0 发布版中作为部分提供的 zope.interface 包的版本。

发布历史 发布通知 | RSS 源

下载文件

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

源分发

zope.interface-7.0.3.tar.gz (252.5 kB 查看哈希值)

上传时间

构建分发

zope.interface-7.0.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (266.4 kB 查看哈希值)

上传时间 CPython 3.13 manylinux: glibc 2.17+ ARM64

zope.interface-7.0.3-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (267.1 kB 查看哈希值)

上传时间 CPython 3.13 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

zope.interface-7.0.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (261.1 kB 查看哈希值)

上传时间 CPython 3.13 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

zope.interface-7.0.3-cp312-cp312-win_amd64.whl (212.1 kB 查看哈希值)

上传时间 CPython 3.12 Windows x86-64

zope.interface-7.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (266.4 kB 查看哈希值)

上传时间 CPython 3.12 manylinux: glibc 2.17+ ARM64

zope.interface-7.0.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (267.0 kB 查看哈希值)

上传时间 CPython 3.12 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

zope.interface-7.0.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (261.1 kB 查看哈希值)

上传时间 CPython 3.12 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

zope.interface-7.0.3-cp312-cp312-macosx_11_0_arm64.whl (209.0 kB 查看哈希值)

上传于 CPython 3.12 macOS 11.0+ ARM64

zope.interface-7.0.3-cp312-cp312-macosx_10_9_x86_64.whl (208.6 kB 查看哈希值)

上传于 CPython 3.12 macOS 10.9+ x86-64

zope.interface-7.0.3-cp311-cp311-win_amd64.whl (212.0 kB 查看哈希值)

上传于 CPython 3.11 Windows x86-64

zope.interface-7.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (261.1 kB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ ARM64

zope.interface-7.0.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (260.0 kB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

zope.interface-7.0.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (255.2 kB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

zope.interface-7.0.3-cp311-cp311-macosx_11_0_arm64.whl (209.0 kB 查看哈希值)

上传于 CPython 3.11 macOS 11.0+ ARM64

zope.interface-7.0.3-cp311-cp311-macosx_10_9_x86_64.whl (208.4 kB 查看哈希值)

上传于 CPython 3.11 macOS 10.9+ x86-64

zope.interface-7.0.3-cp310-cp310-win_amd64.whl (211.6 kB 查看哈希值)

上传于 CPython 3.10 Windows x86-64

zope.interface-7.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (254.6 kB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ ARM64

zope.interface-7.0.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (254.1 kB 查看哈希值)

上传时间: CPython 3.10 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

zope.interface-7.0.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (249.0 kB 查看哈希值)

上传时间: CPython 3.10 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

zope.interface-7.0.3-cp310-cp310-macosx_11_0_arm64.whl (208.4 kB 查看哈希值)

上传时间: CPython 3.10 macOS 11.0+ ARM64

zope.interface-7.0.3-cp310-cp310-macosx_10_9_x86_64.whl (207.9 kB 查看哈希值)

上传时间: CPython 3.10 macOS 10.9+ x86-64

zope.interface-7.0.3-cp39-cp39-win_amd64.whl (211.6 kB 查看哈希值)

上传时间: CPython 3.9 Windows x86-64

zope.interface-7.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (254.0 kB 查看哈希值)

上传时间: CPython 3.9 manylinux: glibc 2.17+ ARM64

zope.interface-7.0.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (253.5 kB 查看哈希值)

上传时间: CPython 3.9 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

zope.interface-7.0.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (248.3 kB 查看哈希值)

上传时间: CPython 3.9 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

zope.interface-7.0.3-cp39-cp39-macosx_11_0_arm64.whl (208.5 kB 查看哈希值)

上传时间: CPython 3.9 macOS 11.0+ ARM64

zope.interface-7.0.3-cp39-cp39-macosx_10_9_x86_64.whl (208.0 kB 查看哈希值)

上传时间: CPython 3.9 macOS 10.9+ x86-64

zope.interface-7.0.3-cp38-cp38-win_amd64.whl (211.6 kB 查看散列)

上传时间 CPython 3.8 Windows x86-64

zope.interface-7.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (257.6 kB 查看散列)

上传时间 CPython 3.8 manylinux: glibc 2.17+ ARM64

zope.interface-7.0.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (257.1 kB 查看散列)

上传时间 CPython 3.8 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

zope.interface-7.0.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (251.7 kB 查看散列)

上传时间 CPython 3.8 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

zope.interface-7.0.3-cp38-cp38-macosx_11_0_arm64.whl (208.5 kB 查看散列)

上传时间 CPython 3.8 macOS 11.0+ ARM64

zope.interface-7.0.3-cp38-cp38-macosx_10_9_x86_64.whl (208.0 kB 查看散列)

上传时间 CPython 3.8 macOS 10.9+ x86-64