跳转到主要内容

对动态模块的低级支持

项目描述

你现在看到了它,现在又看不到了!

此包定义了一种动态模块类型,允许您根据需要动态模块中创建对象。

用法

要使用此包,您应该

  • 识别一个适当的父模块,其中将包含动态模块。

  • 确保使用 plone.alterego.dynamic.create() 调用此模块和动态模块名称。通常,您会在父模块本身中这样做,以便在导入父模块时立即实例化动态模块。

  • 注册一个名为 IDynamicObjectFactory 的命名实用工具。该名称应与动态模块的完整点路径相同。此实用工具将负责创建居住在动态模块中的对象。

示例

有关更全面的示例,请参阅 alterego.txt doctest。

假设我们有一个通用内容类,它应该为每个实例获得一个唯一的接口。

>>> from zope import interface
>>> class IContent(interface.Interface):
...     pass
>>> class Content(object):
...     interface.implements(IContent)

>>> c1 = Content()

要创建唯一的接口,我们将使用动态模块。有一个辅助方法可以简化这个过程。它接受父模块和名称作为参数

>>> from plone.alterego.dynamic import create
>>> dynamic = create('plone.alterego.tests.dynamic')

现在我们可以导入此模块

>>> from plone.alterego.tests import dynamic

为了根据需要创建对象,我们需要注册一个可以充当工厂的实用工具。

>>> from plone.alterego.interfaces import IDynamicObjectFactory
>>> from zope.interface.interface import InterfaceClass
>>> class InterfaceOnDemand(object):
...     interface.implements(IDynamicObjectFactory)
...
...     def __call__(self, name, module):
...         schema = InterfaceClass(name, (interface.Interface,), __module__=module.__name__)
...         setattr(module, name, schema)
...         return schema

此实用工具的名称应与动态模块的完整点名称相对应。这样,我们可以为不同的动态模块拥有不同的工厂。我们将在 ZCML 中注册如下

<utility
    name="plone.alterego.tests.dynamic"
    provides="plone.alterego.interfaces.IDynamicObjectFactory"
    factory=".factory.InterfaceOnDemand"
    />

从现在开始,当我们访问动态模块的属性时,将使用工厂

>>> dynamic.IOne
<InterfaceClass plone.alterego.tests.dynamic.IOne>

请注意,只要上面的 setattr() 调用执行,工厂就只会被调用一次。也就是说,每次访问动态模块的给定属性时,您都将获得相同的对象。

变更日志

2.0.1 (2024-01-19)

内部

  • 更新配置文件。[plone 开发者] (237ff4c8)

2.0.0 (2023-04-15)

重大变更

  • 删除 Python 2 支持。[gforcada] (#1)

1.1.6 (2023-04-15)

内部

  • 更新配置文件。[plone 开发者] (5623f8b3)

1.1.5 (2020-04-20)

错误修复

  • 小的打包更新。(#1)

1.1.4 (2020-03-21)

错误修复

  • 小的打包更新。[各种] (#1)

1.1.3 (2018-11-21)

错误修复

  • 清理项目级文件(setup.py、.travis-ci.yml...)[maurits] [gforcada] (#2524)

  • 初始化 towncrier。[gforcada] (#2548)

1.1.3(未发布)

1.1.2 (2018-11-21)

错误修复

  • 更新代码以遵循 Plone 风格指南。[gforcada]

1.1 (2016-11-01)

新功能

  • 添加与 Python 3 的兼容性。[datakurre]

1.0.1 (2016-08-11)

修复

  • 使用 zope.interface 装饰器。[gforcada]

1.0 (2011-04-30)

  • 使用 stdlib 中的 doctest 而不是 zope.testing 中的 doctest。[davisagli]

1.0a1(2009-04-17)

  • 初始发布。

项目详情


下载文件

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

源代码分发

plone.alterego-2.0.1.tar.gz (14.2 kB 查看哈希值)

上传时间:

构建版本

plone.alterego-2.0.1-py3-none-any.whl (7.2 kB 查看哈希值)

上传时间: Python 3

由以下提供支持