0Pricing
Python For Kids · レッスン

デコレータ

デコレータを使って関数を変更または拡張する方法を学びます。

「デコレータ」はCoddyKit上の無料Python For Kidsレッスンです。 これはレッスン1/5です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython For Kids学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python For Kidsコースには全5レッスンが含まれています。

デコレーター入門

デコレーターは、関数やメソッドの動作を変更できる、Pythonの強力な機能です。関数のコードを変更せずに機能を追加するためによく使用されます。

このレッスンでは、デコレーターとは何か、どのように使用するか、独自のデコレーターを作成する方法を学びます。

デコレータ — イラスト1

デコレーターとは

デコレーターは、別の関数を入力として受け取り、機能を追加した新しい関数を返す関数です。多くの場合、@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における一般的なユースケースと組み込みデコレーター。

よくできました。次のトピックに進みましょう。

デコレータ — イラスト11

よくある質問

「デコレータ」レッスンは無料ですか?

はい。「デコレータ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. デコレータ
  2. ジェネレータ
  3. コンテキストマネージャ(with 文)
  4. 内包表記(リスト、セット、辞書)
  5. イテレータとイテラブル
← Python For Kidsに戻る