python – Zope:无法在属性装饰器下访问REQUEST
|
我正在尝试在类中使用属性装饰器.虽然它本身很好用,但我不能使用任何必须访问REQUEST的代码. class SomeClass():
#Zope magic code
_properties=({'id':'someValue','type':'ustring','mode':'r'},)
def get_someValue(self):
return self.REQUEST
@property
def someValue(self):
return self.REQUEST
虽然调用get_someValue会获得所需的结果,但尝试访问someValue会引发AttributeError. 这种行为背后的逻辑是什么?有没有办法解决这个限制? (我使用的是Zope 2.13.16,Python 2.7.3) 解决方法property decorator仅适用于新式课程;也就是说,从对象继承的类.另一方面,获取(通过属性访问使您可以访问全局REQUEST对象)是非常“老式”的python并且两者不能很好地协同工作,因为属性忽略了获取包装器,这是获取REQUEST所需的宾语.
Zope有自己的类似属性的方法,它可以预先设置新式类和属性decorater,称为 您可以像使用属性装饰器一样使用ComputedAttibute: from ComputedAttribute import ComputedAttribute
class SomeClass():
@ComputedAttribute
def someProperty(self):
return 'somevalue'
ComputedAttribute包装器函数也可以配置一个包装级别,这是我们处理Acquisition包装器时所需要的.在这种情况下,您不能将ComputedAttribute用作装饰器: class SomeClass():
def someValue(self):
return self.REQUEST
someValue = ComputedAttribute(someValue,1)
虽然很容易定义一个新功能来为我们做装饰: from ComputedAttribute import ComputedAttribute
def computed_attribute_decorator(level=0):
def computed_attribute_wrapper(func):
return ComputedAttribute(func,level)
return computed_attribute_wrapper
将其粘贴在某个实用程序模块中,之后您可以将其用作可调用的装饰器,将某些内容标记为可识别的属性: class SomeClass():
@computed_attribute_decorator(level=1)
def someValue(self):
return self.REQUEST
请注意,与属性不同,ComputedAttribute只能用于getter;不支持制定者或删除者. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 使用cKDTree()时的Python中的MemoryError.Query_ball_tree
- Python中几种导入模块的方式总结
- python 3.3 dict:如何将struct PyDictKeysObject转换为pyt
- python – 熊猫:时间戳索引到最接近的第5分钟
- 在Python的Django框架中加载模版的方法
- python – 当SQLAlchemy上的session.flush()失败时,我应该调
- Python导入,路径,目录和模块
- 如果您的代码隐藏运行infinte循环,如何获得响应式GUI? PyQ
- 为什么hash()在python3.4和python2.7下比较慢
- Python 的模块搜索路径!
