Plone ClassSecurityInfo.declarePrivate()等作为Python装饰器

Plone ClassSecurityInfo.declarePrivate()等作为Python装饰器,plone,zope,Plone,Zope,declarePrivate()等Zope 2风格的访问控制声明是否有任何现代Python语法方法装饰器 例如 不,我们仍然坚持使用这种语法 它们不能如此容易地转换为decorator,因为它们是类级声明,而不是实际附加到方法。您需要对调用框架耍些卑鄙的把戏,才能回到类声明和安全性对象,从而使其正常工作 因此,有一个步骤处理安全性对象,将声明转换为Zope2可以识别的类属性;这个步骤现在由原型registerType调用自动完成 class EncryptedField(StringField)

declarePrivate()等Zope 2风格的访问控制声明是否有任何现代Python语法方法装饰器

例如


不,我们仍然坚持使用这种语法

它们不能如此容易地转换为decorator,因为它们是类级声明,而不是实际附加到方法。您需要对调用框架耍些卑鄙的把戏,才能回到类声明和
安全性
对象,从而使其正常工作

因此,有一个步骤处理
安全性
对象,将声明转换为Zope2可以识别的类属性;这个步骤现在由原型
registerType
调用自动完成

class EncryptedField(StringField):
    """
    """
    security = ClassSecurityInfo()

    # Something more nice here? like @private?
    security.declarePrivate('get')

    def get(self, instance, **kwargs):
        value = ObjectField.get(self, instance, **kwargs)
        if getattr(self, 'raw', False):
            return value