私は、呼び出し可能オブジェクトを使用するのに適した場所を見つけ、定義しているものが__call__()
のような、Pythonで関数型プログラミング機能を使用する場合、あります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']