2012-01-13 14 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__方法を使用する必要があります。

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

は、より多くの情報のためAcquisition chapter of the Zope2 documentationを参照してください。

関連する問題