GAE:如何从@classmethod

时间:2019-06-01 20:34:24

标签: google-app-engine app-engine-ndb google-app-engine-python

我们如何访问@classmethod中的属性值?例如:

class Account(polymodel.PolyModel):
  someprop = ndb.StringProperty(required=True)
​
    @classmethod
    def get_or_create_someprop(cls):
        if not cls.someprop:
            # create someprop
        else: 
            return cls.someprop

在上面的示例代码中,我尝试创建someprop(如果它不存在),或者返回它(如果已经存在)。我以为上面的代码可以实现这一目标。但是,我要做的第一步是从类方法中访问someprop值。使用cls.someprop实际上并不会返回someprop的值,而是会返回StringProperty('state')

我尝试使用this的{​​{1}}和self

那么,可以使用类方法访问实体的属性值吗?如果可以,怎么办?

1 个答案:

答案 0 :(得分:0)

通常,您不能从类方法中执行此操作,因为属性属于对象,即类的实例(类只是对象生成器)。换句话说,您需要self参数来引用对象及其属性。

在特定情况下,该类是实体模型(用于创建实体的蓝图),而不是实体,并且您只能引用实体本身的属性。

但是您应该能够简单地通过不将其声明为类方法来实现您的目标-然后,它成为对象/实体的方法,在这种情况下,您可以通过引用实体的属性self代替clsself.someprop

不过,我将使检查更加具体,以涵盖该属性具有值(例如0)或空字符串的情况,该值在逻辑检查中被python解释为False:{ {1}},而不是if self.someprop is None