2017-10-03 10 views
3

은 내가 이런 abc을 사용할 때 이제이 NDB 모델 클래스ndb.StringProperty는 파이썬 문자열과 어떻게 같습니까? 로 가져</p> <pre><code>if foo.abc == "a": print "I'm in!" </code></pre> <p>블록과 인쇄 <code>I'm in!</code></p> <p>어떻게 이런 일이 가능하면 :

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

있나요? 나는 또한 foo.abc 인쇄를 시도

, 그것은 당신이 제대로 속성을 사용하는 클래스의 인스턴스를 인스턴스화해야

답변

2

StringProperty('abc')를 반환했습니다. NDB 속성 __equal__ 연산자를 덮어 쓰기 및 True로 처리됩니다 비 빈 객체를 반환하기 때문에

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!"을 받고있다. query.filter(foo.abc == 'def')

+1

이 문은'True '인 StringProperty ('abc ') == "a"'를 평가할 때'if foo (abc ='bar ')와 같은 쿼리를 작성하는 것으로 평가됩니다. 'class foo'가이 인수를 다루기위한 적절한 생성자를 가지고 있다면 == "a"또는'foo ('xyz') == "a"' '진실'이되지 않습니다. –

+1

결코 진실하지 않습니다. IF 문에서 True로 취급됩니다. 'abc''이라면'보십시오. 파이썬 없음에서 빈 문자열, 0, 빈 목록, 빈 튜플, 빈 집합은 False로 처리됩니다. 부울 표현에서 True를 나타내는 다른 문자. __equal__을 덮어 쓰지 않으면. –