0Pricing
Python Academy · レッスン

デコレーター

関数を変更したり機能を拡張したりするためのデコレーターの使い方を学びます。

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

Pythonには、次のような組み込みデコレーターがあります:

  • @staticmethod:静的メソッドを定義します。
  • @classmethod:クラスメソッドを定義します。
  • @property:プロパティメソッドを定義します。

デコレーターでよくある間違い

デコレーターでよくある間違い

次のような間違いに注意してください:

  • 元の関数名やdocstringを保持しない(functools.wrapsを使用します)。
  • 単純な処理にデコレーターを不要に使用する。
  • ラッパー関数で引数を処理するのを忘れる。

何を学びましたか

何を学びましたか

このレッスンでは、次のことを学びました:

  • デコレーターとは何か、Pythonでどのように動作するか。
  • 基本的なデコレーター、引数付きデコレーター、連鎖したデコレーターの作成方法と使用方法。
  • デコレーターの一般的な使用例と、Pythonの組み込みデコレーター。

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

デコレーター — イラスト11

よくある質問

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

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

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

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