본문 바로가기

Language/Python

[Python] __mising__ method (default value)

dict 사용시, default value 설정하는 방법은 2개가 있다.

 

1. dict의 setdefault 사용

2. collections의 defaultdict 사용

 

파일을 열고 열린 파일 handle을 연결시키는 dict를 사용한다고 할 때,

 

 

case 1) dict의 setdefault 사용

try:
	handle = pictures.setdefault(path, open(path, 'a+b'))
except OSError:
	print(f"cannot open path: {path}")
	raise
else:
	handle.seek(0)
    image_data = handle.read()

1. open 함수가 항상 호출됨 --> open 함수의 error 처리 해줘야 함

2. setdefault의 예외 처리도 필요

 

 

case 2) collections의 defaultdict 사용

 

from collections import defaultdict

def open_picture(path):
	try:
		return open(path, 'a+b')
	except OSError:
		print(f"cannot open path: {path}")
		raise

pictures = defaultdict(open_picture)
handle = pictures[path]
handle.seek(0)
image_data = handle.read()

>> type error 발생함

 

1. defaultdict의 default로 전달된 함수 open_picture는 인자를 받을 수 없음 (처리하려는 키 값을 몰라)

 

 

__mising__ method 이용

class Pictures(dict):
	def __missing__(self, key):
		value = open_picture(key)
		self[key] = value
		return value

pictures = Pictures()
handle = pictures[path]
handle.seek(0)
image_data = handle.read()

pictures에 path의 key 값이 존재하지않으면, __missing__ 함수가 호출되고 그 값이 넘어감

--> default key를 만들 때 키의 구체적인 값을 분명히 해야하는 상황이면 __missing__ method 쓰자

'Language > Python' 카테고리의 다른 글

[Python] assignment expression(walrus operator)  (0) 2021.01.24