2011-12-04 4 views
1

파이썬의 "명시적인"지침에도 불구하고 어떤 이유로 많은 유형이 내재적으로 부울 값으로 변환 될 수 있습니다. 어쨌든 ...클래스를 암시 적으로 bool로 변환 할 수있는 것은 관용적입니까?

사용자 정의 클래스를 암시 적으로 bool로 변환 할 수있는 관용구가 있습니까? 그렇다면 어떤 기능을 정의해야합니까? 내 구체적인 경우에는 Image 클래스가 있습니다. 그렇지 않으면 False 어쨌든 (파일)에서로드 된 데이터를 보유 할 때 True이되도록 부울로 변환 가능하게하려고합니다.

답변

3

이 관용적 일 수 있습니다. 예를 들어 컨테이너 객체가 비어 있으면 false를 테스트해야합니다. 변환을 수행하려면 Python 2.x에서 __nonzero__을 정의하고 Python 3에서는 __bool__을 정의해야합니다. 파이썬 2와 3을 타겟으로하는 코드를 작성할 때, 둘 다 정의하십시오.

그러나 "암시적인 것보다 낫습니다"지침에 따라 대신 if img.is_loaded():을 말하고 싶을 수도 있습니다. 주된 이유는 __nonzero__/__bool__입니다. 컨테이너는 Python 데이터 모델의 설명에 반영되어 있습니다. "이 메서드가 정의되어 있지 않으면 __len__()이 정의되어 있으면 호출되고 그 결과가 true이면 개체가 true로 간주됩니다. 0이 아닙니다. " 따라서 실제로는 빠른 검사로 구현 된 len(obj) == 0의 속기입니다.

관련 문제