2012-07-18 49 views
0

我有一个对象可以包含对同一类型的其他对象的引用。在我的验证器中,我想确保引用不是自己的。这可能吗?appengine python验证程序利用自我

class MyObject(db.Model): 

    def not_self_validator(value): 
    if self._my_entity == value: #something like this.. 
     logging.warn('attempted to set object to itself') 
     raise ValueError('Unable to set an object to itself') 

    _my_entity = db.ReferenceProperty(db._SELF_REFERENCE,required=False,default=None,validator=not_self_validator) 
+0

'self'在Python中不是一个神奇的值。如果你的函数是一个实例方法,它必须以'self'作为第一个参数。如果它不是实例方法,那么根本就没有可以附加到它的“自我”的概念。 – geoffspear 2012-07-18 12:15:57

+0

谢谢Wooble,这就是我要问的。在appengine框架的背景下,是否有可能从验证者获得对自己的引用。我编辑了这个问题来反映这一点。 – 2012-07-18 12:48:40

回答

1

属性验证器可以接收任何方法/函数,但不可能将该方法绑定到自己。但是,您可以将验证例程修改为如下所示:

def not_self_validator(value): 
    #is checks for same address(pointer) whereas == will call the equality method 
    if value._my_entity is value: 
    logging.warn('attempted to set object to itself') 
    raise ValueError('Unable to set an object to itself')