2012-01-13 2 views
0

По существу, я хочу проверить другой объект, чтобы увидеть, установлен ли атрибут там перед обработкой элементов в объекте object.aq_chain.Каков наилучший способ настройки цепочки приобретения объекта Zope?

Я не могу избежать бесконечной рекурсии при переопределении getattr и getattribute.

UPDATE

Пример:

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, я пытаюсь работать внутри.

+0

Не могли бы вы привести конкретный пример. Вы всегда можете использовать специальные методы доступа к атрибутам, которые не инициируют получение, но трудно сказать что-либо без конкретного примера. –

ответ

0

Для построения цепочки сбора, вам нужно использовать метод __of__ обертки Acquisition:

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

Смотрите Acquisition chapter of the Zope2 documentation для получения дополнительной информации.

Смежные вопросы