ndb.StringProperty如何等于python字符串?

ndb.StringProperty如何等于python字符串?,python,google-app-engine,app-engine-ndb,Python,Google App Engine,App Engine Ndb,我有这个ndb模型课 class foo(ndb.Model): abc = ndb.StringProperty() 现在当我使用abc时,就像这样: if foo.abc == "a": print "I'm in!" 它进入if块并打印我在 这怎么可能 我还尝试打印foo.abc,它返回StringProperty('abc')您必须实例化类的实例才能正确使用属性 class Foo(ndb.Model): abc = ndb.StringProperty() foo =

我有这个ndb模型课

class foo(ndb.Model):
  abc = ndb.StringProperty()
现在当我使用abc时,就像这样:

if foo.abc == "a":
  print "I'm in!"
它进入if块并打印
我在

这怎么可能


我还尝试打印
foo.abc
,它返回
StringProperty('abc')
您必须实例化类的实例才能正确使用属性

class Foo(ndb.Model):
  abc = ndb.StringProperty()

foo = Foo()
foo.abc = 'some val'
print foo.abc  # prints 'some val'
print foo.abc == 'a' # prints False
print Foo.abc == 'a' # prints something not boolean - can't check now.

您将得到
“我在!”
,因为ndb属性正在覆盖
\uuuu equal\uuuu
运算符并返回一个被视为
True
的非空对象。这用于进行类似于
query.filter(foo.abc='def')

的查询,因此,此语句的计算结果为
if-StringProperty('abc')==“a”
,这是
True
,但当我编写
if-foo(abc='bar')==“a”
if-foo('xyz==“a”
假设
类foo
具有处理此参数的正确构造函数。这不是真的
这从来都不是真的。在IF语句中它被视为True。如果是“abc”,请尝试
。在Python None中,空字符串、0、空列表、空元组、空集合被视为False。其他在布尔表达式中为True。除非相等覆盖。