본문으로 바로가기

0은 False이다 !!

category Language/Python 2022. 4. 3. 00:29
728x90
반응형
 

개요

youtube를 보던 중에 None 체크에 대해 설명하던 영상을 보게 됐는데 설명이 아주 직관적으로 다가와서 적어두고자 한다.

 

Description

class TodoItem:
    def __init__(self, state=None):
        self.state = state if state else -1

    def __str__(self):
        if self.state == -1:
            return "UNDEFINED"
        elif self.state == 1:
            return "UNSET"
        else:
            return "SET"

이 class의 생성자를 보면 state 값이 존재할 때 입력된 state를 그밖에 나머지는 -1로 self.state 변수를 초기화한다. 이후 __str__ 매직 메서들 통해 결과를 출력할 수 있게 되는데 케이스별로 어떤 결과가 나오는지 확인해보자

a1 = TodoItem()
print(a1) 
    
# Expect: UNDEFINED
# Outut: UNDEFINED

위의 케이스에서는 인스턴스화 과정에서 아무것도 입력을 안 했기 때문에 state 값이 -1로 초기화돼서 UNDEFINED 가 출력된다.

a2 = TodoItem(1)
print(a2)

# Expect: UNSET
# OUTPUT: UNSET
이 케이스에서는 1을 입력했기 때문에 기대했던 UNSET과 실제 결과로 확인한 값이 일치한다.
a3 = TOdoItem(0)
print(a3)

# Expect: UNSET
# Output: UNDEFINED (..?)

이 케이스는 클래스를 생성할 때 0을 넘겼으므로 __str__의 조건에 따라 UNSET이 나와야 하는 것을 기대했지만 실제로는 UNDEFINED가 나왔다. 어떻게 된 걸까?

 

IDLE에서 테스트해보자

위 과정에서 유추할 수 있는 건 if문에서 0은 False로 판단한다는 것이다. 실제로도 그럴까? IDLE를 통해서 확인해봤다.
>>> 0 == False
True
>>> 
>>> a = 0
>>> a if a else -1
-1
>>>

그렇다 0은 False이다. if문을 통해 정수를 체킹 할 일이 있을 때 유념해야 될 내용이다.

 
 

어떻게 해야 될까?

해당 영상에서도 확인할 수 있겠지만 None 체킹을 해주자라는 것이 주요 내용이다.

class TodoItem:
    def __init__(self, state=None):
        self.state = state if state is not None else -1  

    def __str__(self):
        if self.state == -1:
            return "UNDEFINED"
        elif self.state == 0:
            return "UNSET"
        else:
            return "SET"
 

Reference

728x90
반응형