目次
はじめに
Pythonには「callable(コーラブル)」という概念があります。これは「呼び出し可能なオブジェクト」を指し、関数やクラスのインスタンスなどが対象になります。この記事では、callable関数の基本から使用例、応用例までを詳しく解説します。
callable関数とは?
callableとは、「関数のように()(丸括弧)を使って呼び出すことができるオブジェクト」のことです。Pythonの組み込み関数callable()
を使うと、オブジェクトが呼び出し可能かどうかを判定できます。
print(callable(len)) # True(組み込み関数はcallable)
print(callable(42)) # False(整数はcallableではない)
callable関数の基本構文
Pythonでは関数やクラス、特定の特殊メソッド(__call__
)を持つオブジェクトがcallableになります。
1. 通常の関数
def greet(name):
return f"Hello, {name}!"
print(callable(greet)) # True
2. クラスのインスタンス(__call__
メソッドを実装)
class Adder:
def __init__(self, value):
self.value = value
def __call__(self, x):
return self.value + x
add_five = Adder(5)
print(callable(add_five)) # True
print(add_five(10)) # 15
callable関数の使用例
1. 関数を引数に取る高階関数
def apply_function(func, value):
if callable(func):
return func(value)
else:
return "Not callable"
print(apply_function(len, "Hello")) # 5
print(apply_function(42, "Hello")) # Not callable
2. クラスを関数のように利用
class Multiplier:
def __init__(self, factor):
self.factor = factor
def __call__(self, value):
return self.factor * value
triple = Multiplier(3)
print(triple(4)) # 12
callable関数の応用例
1. デコレーターとしての利用
def logger(func):
def wrapper(*args, **kwargs):
print(f"Calling {func.__name__} with args={args}, kwargs={kwargs}")
return func(*args, **kwargs)
return wrapper
@logger
def add(a, b):
return a + b
print(add(2, 3)) # ログを出力してから計算結果を表示
2. 状態を保持する関数オブジェクト
class Counter:
def __init__(self):
self.count = 0
def __call__(self):
self.count += 1
return self.count
counter = Counter()
print(counter()) # 1
print(counter()) # 2
まとめ
Pythonのcallable関数は、関数だけでなく、クラスやオブジェクトでも利用できます。特に__call__
メソッドを活用すると、柔軟で強力なデザインが可能になります。デコレーターや状態保持オブジェクトなど、実用的な応用も多いので、ぜひ活用してみてください。