我有一个浏览器认为它调用方法是这样的:aq_inner(和朋友)在敏捷的环境中仍然需要吗?
def __call__(self):
context = aq_inner(self.context)
parent = aq_parent(context).
...
开头放置一个PDB和玩似乎,对于敏捷也没有必要使用它,是这样吗?
ipdb> self.context, id(self.context), self.context.__class__
(<Container at /plone/ausgaben>, 4651890160, <class 'plone.dexterity.content.Container'>)
ipdb> aq_inner(self.context), id(aq_inner(self.context)), aq_inner(self.context).__class__
(<Container at /plone/ausgaben>, 4651890160, <class 'plone.dexterity.content.Container'>)
所以结果是相同的使用aq_inner或不。
所以问题是:灵巧(作为self.context和我们的项目实际上一切都是基于灵活性的)防止我们不得不用aq_inner和aq_parent等来包装所有东西,而是直接使用对象或__parent__
指针?
我怀疑你会看到与id(aq_base(self.context))显着不同的东西。很确定敏捷对象是aq包装的。 – sdupton 2014-09-02 15:38:41
事实上,''aq_base''有一个不同的id,并且它的__name__没有路径,但问题仍然没有得到解答:在敏捷环境中,我可能忘记必须使用aq_inner和朋友吗? – gforcada 2014-09-02 22:05:34
猜测包装是简单/一致的,以至于不需要aq_inner,但请记住'__parent__'指针需要采集包装器,而不是其他方法 - IIRC'assert getattr(aq_base(self.context ),'__parent__',None)是None'。 – sdupton 2014-09-03 04:17:39