デコレータ
デコレータを使って関数を変更または拡張する方法を学びます。
「デコレータ」はCoddyKit上の無料Python For Kidsレッスンです。 これはレッスン1/5です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython For Kids学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python For Kidsコースには全5レッスンが含まれています。
デコレーター入門
デコレーターは、関数やメソッドの動作を変更できる、Pythonの強力な機能です。関数のコードを変更せずに機能を追加するためによく使用されます。
このレッスンでは、デコレーターとは何か、どのように使用するか、独自のデコレーターを作成する方法を学びます。

デコレーターとは
デコレーターは、別の関数を入力として受け取り、機能を追加した新しい関数を返す関数です。多くの場合、@decorator_name構文とともに使用されます。
# Basic example of a decorator
def decorator(func):
def wrapper():
print("Before the function call")
func()
print("After the function call")
return wrapper
@decorator
def say_hello():
print("Hello!")
say_hello()デコレーターの仕組み
デコレーターを使用すると、Pythonは元の関数を、デコレーターが返すラッパー関数に置き換えます。
# How decorators work
def decorator(func):
def wrapper():
print("Wrapper called")
func()
return wrapper
@decorator
def greet():
print("Greetings!")
print(greet.__name__) # Outputs: wrapper
greet()引数を取る関数でデコレーターを使用する
ラッパー関数で*argsと**kwargsを使用すると、デコレーターは引数を取る関数にも対応できます。
# Decorator for functions with arguments
def decorator(func):
def wrapper(*args, **kwargs):
print(f"Arguments: {args}, {kwargs}")
return func(*args, **kwargs)
return wrapper
@decorator
def add(a, b):
return a + b
print(add(3, 5))複数のデコレーターを連結する
1つの関数に複数のデコレーターを使用できます。デコレーターは、上から下へ、記述されている順番に適用されます。
# Chaining multiple decorators
def decorator1(func):
def wrapper():
print("Decorator 1")
func()
return wrapper
def decorator2(func):
def wrapper():
print("Decorator 2")
func()
return wrapper
@decorator1
@decorator2
def greet():
print("Hello!")
greet()パラメーター付きデコレーターの作成
パラメーター付きデコレーターは引数を受け取り、より柔軟な機能を実現できます。
# Parameterized decorator
def repeat(times):
def decorator(func):
def wrapper(*args, **kwargs):
for _ in range(times):
func(*args, **kwargs)
return wrapper
return decorator
@repeat(3)
def say_hello():
print("Hello!")
say_hello()デコレーターの一般的な用途
デコレーターは、一般に次のような用途で使用されます。
- 関数の呼び出しとその引数のログを記録する。
- 関数の実行時間を計測する。
- アクセス制御を行う(ユーザー権限の確認など)。
- パフォーマンス向上のために結果をキャッシュする。
Pythonの組み込みデコレーター
Pythonには、次のような組み込みデコレーターが用意されています。
@staticmethod: 静的メソッドを定義します。@classmethod: クラスメソッドを定義します。@property: プロパティメソッドを定義します。
デコレーターでよくある間違い
次のような間違いに注意してください。
- 元の関数の名前やdocstringを保持しない(
functools.wrapsを使用します)。 - 単純な処理にデコレーターを不要に使用する。
- ラッパー関数で引数を処理し忘れる。
何を学びましたか
このレッスンでは、次の内容を学びました。
- デコレーターとは何か、またPythonでどのように動作するか。
- 基本的なデコレーター、パラメーター付きデコレーター、連鎖デコレーターの作成方法と使い方。
- Pythonにおける一般的なユースケースと組み込みデコレーター。
よくできました。次のトピックに進みましょう。

よくある質問
「デコレータ」レッスンは無料ですか?
はい。「デコレータ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python For Kidsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python For Kidsコースには全5レッスンが含まれています。
「デコレータ」で何を学びますか?
デコレータを使って関数を変更または拡張する方法を学びます。 ブラウザで直接実行するハンズオンコードでPython For Kidsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Python For Kidsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPython For Kidsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/5です。
「デコレータ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPython For Kidsレッスンでコードを書いて実行できますか?
はい。すべてのPython For Kidsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。