【问题标题】:How is ndb.StringProperty equals a python string?ndb.StringProperty 如何等于 python 字符串?
【发布时间】:2017-10-03 12:54:36
【问题描述】:

我有这个 ndb 模型类

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

现在当我像这样使用abc 时:

if foo.abc == "a":
  print "I'm in!"

它进入 if 块并打印 I'm in!

这怎么可能?

我也尝试打印foo.abc,它返回StringProperty('abc')

【问题讨论】:

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


    【解决方案1】:

    您必须实例化一个类的实例才能正确使用属性。

    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.
    

    您得到"I'm in!",因为ndb 属性正在覆盖__equal__ 运算符并返回一个被视为True 的非空对象。这用于查询query.filter(foo.abc == 'def')

    【讨论】:

    • 因此,该语句的计算结果为if StringProperty('abc') == "a",即True,但是当我写if foo(abc='bar') == "a"if foo('xyz') == "a" 时,因为class foo 有一个适当的构造函数来处理这个参数。不是True
    • 这绝不是真的。它在 IF 语句中被视为 True。试试if 'abc'。在 Python None 中,空字符串、0、空列表、空元组、空集被视为 False。其他在布尔表达式中为 True。除非相等被覆盖。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 2013-04-25
    • 1970-01-01
    • 2022-06-19
    相关资源
    最近更新 更多