定制Zope对象的采集链的最佳方法是什么?

时间:2012-01-13 18:26:06

标签: python zope acquisition

基本上,我想检查另一个对象,看看在处理object.aq_chain中的项之前是否设置了属性。

当覆盖getattr和getattribute时,我似乎无法避免无限递归。

更新

示例:

import ExtensionClass, Acquisition

class Folder(ExtensionClass.Base): pass

class File(Acquisition.Implicit): pass

parent1 = Folder()
parent1.foo = 1
parent2 = Folder()
parent2.foo = 2

child = File()
parent1.child = child
child.otherparent = parent2

print parent1.child.foo # prints 1, but i want it to print 2

如果不言而喻,我正在尝试使用API​​。

1 个答案:

答案 0 :(得分:0)

要构建采集链,您需要使用Acquisition包装器的__of__方法:

>>> wrapped = child.__of__(parent2)
>>> assert wrapped.aq_parent is parent2
True

有关详细信息,请参阅Acquisition chapter of the Zope2 documentation