11.5.4クラスデコレーター

クラスデコレータは、関数デコレータの概念をクラスに適用したものです。クラス定義が完了した後に、そのクラスを変更したり拡張したりするために使用されます。具体的には、クラスデコレータはクラスを引数として受け取り、新しいクラスや同じクラスを修正したものを返します。

以下はクラスデコレータの基本的な概念と使い方です:

  1. 定義: クラスデコレータは、通常の関数として定義されます。この関数は、デコレートされるクラスを唯一の引数として受け取ります。

  2. 使用方法: @decorator_name の形式で、クラス定義の直前に配置します。

  3. 返り値: クラスデコレータは新しいクラスを返すか、渡されたクラスを変更して返します。

・デコレーターの基本
>>> #クラスデコレーターを定義
>>> def hoge_deco(cls):
...    cls.hoge = 'ほげ'
...    return cls
...
>>> @hoge_deco
... class MyClass:
...  pass
...
>>> if __name__ == '__main__':
...    print(MyClass.hoge)
...
ほげ
>>>
  1. 1.クラスデコレーターの定義:

    • hoge_deco という名前の関数を定義しています。この関数は引数としてクラス cls を受け取ります。
    • クラスデコレーターは、クラスの定義を変更するか、新しいクラスを返すことで、クラスの動作をカスタマイズします。

  2. 2.デコレーター内の操作
    :

    • cls.hoge = 'ほげ': この行で、受け取ったクラス cls に新しい属性 hoge を追加して、その値を 'ほげ' に設定しています。
    • return cls: 変更したクラスを返しています。

  3. 3.クラスのデコレーション
    :

    • @hoge_deco: この行で hoge_deco デコレーターを MyClass に適用しています。これにより、MyClass の定義がデコレーターを通じて変更されます。
    • class MyClass:: 通常のクラス定義。ただし、このクラスは上で定義したデコレーターによって変更されます。

  4. 4.結果の確認
    :

    • if __name__ == '__main__':: コードが直接実行された場合のみ、以下のコードを実行します。
    • print(MyClass.hoge): MyClasshoge 属性を表示します。デコレーターが正しく適用された場合、出力は 'ほげ' になります。

結果:

  • 'ほげ' が表示されることで、クラスデコレーターが正しく動作し、クラスに新しい属性を追加したことが確認できます。


続きます