2009-07-06 5 views
27

알다시피, 파이썬에는 객체에 대한 부울 값이 있습니다. 클래스에 __len__ 메소드가있는 경우 __len__()이 발생하는 모든 인스턴스는 부울 False으로 평가됩니다 (예 : 빈 목록).파이썬에서 객체의 부울 값

실제로 모든 반복 가능한 빈 사용자 정의 객체는 부울 식으로 표시되는 경우 False으로 평가됩니다.

이제 bar 속성의 클래스 foo이 있다고 가정합니다. 어떻게 진리 값을 정의 할 수 있습니까? 그렇다면 그렇지 않으면 True if bar % 2 == 0False으로 평가 될 것입니다. 예를 들어

:

myfoo = foo() 
myfoo.bar = 3 
def a(myfoo): 
    if foo: 
     print "spam" 
    else: 
     print "eggs" 

그래서, a(myfoo)"eggs"를 인쇄해야합니다.

+0

도 참조하십시오 :'__nonzero __()' –

답변

34

__nonzero__에 대한 Python 문서를 참조하십시오. 파이썬 < 3.0

class foo(object): 
    def __nonzero__(self) : 
     return self.bar % 2 == 0 

def a(foo): 
    if foo: 
     print "spam" 
    else: 
     print "eggs" 

def main(): 
    myfoo = foo() 
    myfoo.bar = 3 
    a(myfoo) 

if __name__ == "__main__": 
    main() 
38

:

당신은 당신이 원하는 것을 달성하기 위해 __nonzero__을 사용해야합니다. 부울 컨텍스트에서 객체를 평가할 때 Python에서 자동으로 호출하는 메서드입니다. 평가할 값으로 사용될 부울을 반환해야합니다.

예컨대 : 파이썬 => 3.0

class Foo(object): 

    def __init__(self, bar) : 
     self.bar = bar 

    def __nonzero__(self) : 
     return self.bar % 2 == 0 

if __name__ == "__main__": 
    if (Foo(2)) : print "yess !" 

:

같은 것, 방법을 제외하고는 훨씬 더 분명 __bool__로 이름이 바뀌 었습니다.

+4

'__nonzero__'도 파이썬> = 3.0에서도 작동합니까? – Wolf

+1

@Wolf, 그렇지 않습니다. – Hammerite