내가 호출 객체를 사용하기에 좋은 장소를 찾을 정의하는 사람들은 __call__()
같은 파이썬에서 함수형 프로그래밍 기능을 사용하여 때, map()
, filter()
, reduce()
.
일반 함수 또는 람다 함수보다 호출 가능한 객체를 사용하는 가장 좋은 시간은 논리가 복잡하고 일부 상태를 유지해야하거나 __call__()
함수에 전달되지 않은 다른 정보를 사용하는 경우 입니다.
다음은 호출 가능한 객체 및를 사용하여 파일 이름 확장자를 기준으로 파일 이름을 필터링하는 코드입니다 filter()
.
호출 가능 :
import os
class FileAcceptor(object):
def __init__(self, accepted_extensions):
self.accepted_extensions = accepted_extensions
def __call__(self, filename):
base, ext = os.path.splitext(filename)
return ext in self.accepted_extensions
class ImageFileAcceptor(FileAcceptor):
def __init__(self):
image_extensions = ('.jpg', '.jpeg', '.gif', '.bmp')
super(ImageFileAcceptor, self).__init__(image_extensions)
용법:
filenames = [
'me.jpg',
'me.txt',
'friend1.jpg',
'friend2.bmp',
'you.jpeg',
'you.xml']
acceptor = ImageFileAcceptor()
image_filenames = filter(acceptor, filenames)
print image_filenames
산출:
['me.jpg', 'friend1.jpg', 'friend2.bmp', 'you.jpeg']