デコレーター
関数を変更したり機能を拡張したりするためのデコレーターの使い方を学びます。
「デコレーター」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン1/5です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全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の組み込みデコレーター
Pythonには、次のような組み込みデコレーターがあります:
@staticmethod:静的メソッドを定義します。@classmethod:クラスメソッドを定義します。@property:プロパティメソッドを定義します。
デコレーターでよくある間違い
デコレーターでよくある間違い
次のような間違いに注意してください:
- 元の関数名やdocstringを保持しない(
functools.wrapsを使用します)。 - 単純な処理にデコレーターを不要に使用する。
- ラッパー関数で引数を処理するのを忘れる。
何を学びましたか
何を学びましたか
このレッスンでは、次のことを学びました:
- デコレーターとは何か、Pythonでどのように動作するか。
- 基本的なデコレーター、引数付きデコレーター、連鎖したデコレーターの作成方法と使用方法。
- デコレーターの一般的な使用例と、Pythonの組み込みデコレーター。
よくできました!次のトピックに進みましょう。

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