0Pricing
Learn AI with Python · レッスン

デコレータ

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

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

「デコレータ」で何を学びますか?

デコレータを使って関数を変更または拡張する方法を学びます。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn AI with Pythonを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/5です。

「デコレータ」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLearn AI with Pythonレッスンでコードを書いて実行できますか?

はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

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

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