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
반응형
'Language > Python' 카테고리의 다른 글
프로세스의 실행 경로 가져오기 (0) | 2022.04.05 |
---|---|
UserAssist 레지스트리 분석 (0) | 2022.04.03 |
pyinstaller의 EXE파일, 소스 코드 열어보기 (0) | 2021.09.19 |
pyJWT : encode /decode / registerd claim names (0) | 2021.08.13 |
Python의 Strip()은 재귀 호출 (0) | 2021.06.07 |