跳转到主要内容

将实例方法包装在持久化工厂包装器中,以便将实例方法用作ZCA工厂。

项目描述

;--Doctest--

z3c.persistentfactory

ZCA和ZODB是一个很好的组合,其中组件需要持久状态。ZCA工厂或处理器通常从被适配的持久对象中检索所需的任何持久状态。如果所需的持久状态不是特定于被适配的对象,一个常见的解决方案是注册一个持久实用程序,然后在工厂或处理器中进行查找。然而,持久实用程序方法需要查找一个适当的实用程序,这要求在ZCA注册中提供支持,无论是在接口提供还是在实用程序名称。

然而,在某些情况下,将工厂或处理器视为持久对象的实例方法是更符合Python和ZCA的面向对象语义的。这种方法可以在self上访问非上下文特定的持久状态。

实例方法事件处理器

这可能有用的一个例子是,某些非上下文持久状态与某些事件处理器紧密耦合,在这种情况下,实例方法具有更好的语义。

“Baz”类在Python代码中使用装饰器。请注意,工厂装饰器必须放在声明装饰器之前,以确保它在最后运行并反映声明。

>>> from z3c.persistentfactory import testing
>>> baz = testing.Baz()

将持久化工厂包装的实例方法注册为处理器。

>>> from zope import component
>>> component.provideHandler(factory=baz.factory)

该方法适配IFoo,因此创建一个提供IFoo的对象用作事件。

>>> component.adaptedBy(baz.factory)
(<InterfaceClass z3c.persistentfactory.testing.IFoo>,)
>>> from zope import interface
>>> foo = testing.Foo()
>>> interface.alsoProvides(foo, testing.IFoo)

当事件被通知时,方法作为参数调用事件。

>>> import zope.event
>>> zope.event.notify(foo)
Called <bound method Baz.factory of
<z3c.persistentfactory.testing.Baz object at ...>>
  args: (<z3c.persistentfactory.testing.Foo object at ...>,)
  kwargs: {}

实例方法适配器工厂

另一个例子是,适配器工厂需要查找适配对象的特定持久状态,但该状态不能存储在适配对象自身上。存储共享持久状态的组件可以将其一个实例方法注册为适配器工厂,该工厂将在self上查找必要的持久状态。

将持久化工厂包装的实例方法注册为适配器工厂。

>>> component.provideAdapter(factory=baz.factory)

该方法实现IBar。

>>> tuple(interface.implementedBy(baz.factory))
(<InterfaceClass z3c.persistentfactory.testing.IBar>,)

当查找适配器时,该方法作为参数调用要适配的对象。

>>> result = component.getAdapter(foo, testing.IBar)
Called <bound method Baz.factory of
<z3c.persistentfactory.testing.Baz object at ...>>
  args: (<z3c.persistentfactory.testing.Foo object at ...>,)
  kwargs: {}
>>> result
(<bound method Baz.factory of
 <z3c.persistentfactory.testing.Baz object at ...>>,
 (<z3c.persistentfactory.testing.Foo object at ...>,), {})

变更日志

0.3 - 2008-04-10

  • 声明者的声明不跟踪类方法声明的变化。

  • 将声明者的类上的声明与实例上的声明隔离开来。

0.2 - 2008-04-09

  • 改进README.txt,以提供更清晰的示例。

0.1 - 2008-04-08

  • 首次发布

项目详情


下载文件

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

源分发

z3c.persistentfactory-0.3.tar.gz (7.5 kB 查看哈希值)

上传时间

由以下组织支持

AWSAWS 云计算和安全赞助商 DatadogDatadog 监控 FastlyFastly CDN GoogleGoogle 下载分析 MicrosoftMicrosoft PSF赞助商 PingdomPingdom 监控 SentrySentry 错误日志 StatusPageStatusPage 状态页面