【问题标题】:GAE: How to access a property value from within @classmethodGAE:如何从@classmethod 中访问属性值
【发布时间】:2019-10-17 23:56:31
【问题描述】:

我们如何访问@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')

我尝试使用thisself,它们是undefined

那么,是否可以使用类方法访问实体的属性值?如果有,怎么做?

【问题讨论】:

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


    【解决方案1】:

    通常你不能从类方法中做到这一点,因为属性属于一个对象,即类的一个实例(类只是对象生成器)。换句话说,您需要 self 参数来引用对象及其属性。

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

    但是您应该能够通过不将其声明为类方法来实现您所寻求的 - 然后它成为对象/实体的方法,在这种情况下您可以通过引用实体的属性self 而不是 cls: self.someprop

    不过,我会让检查更具体一些,以涵盖属性具有类似 0 的值或空字符串的情况,python 在逻辑检查中将其解释为 Falseif self.someprop is None而不是if not self.someprop

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-20
      • 1970-01-01
      • 1970-01-01
      • 2019-10-21
      相关资源
      最近更新 更多