我们如何访问@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
。
那么,可以使用类方法访问实体的属性值吗?如果可以,怎么办?
答案 0 :(得分:0)
通常,您不能从类方法中执行此操作,因为属性属于对象,即类的实例(类只是对象生成器)。换句话说,您需要self
参数来引用对象及其属性。
在特定情况下,该类是实体模型(用于创建实体的蓝图),而不是实体,并且您只能引用实体本身的属性。
但是您应该能够简单地通过不将其声明为类方法来实现您的目标-然后,它成为对象/实体的方法,在这种情况下,您可以通过引用实体的属性self
代替cls
:self.someprop
。
不过,我将使检查更加具体,以涵盖该属性具有值(例如0)或空字符串的情况,该值在逻辑检查中被python解释为False
:{ {1}},而不是if self.someprop is None
。