概要
クラスからオブジェクトを作成する前後や作成するときに好きな処理を追加することができます
環境
- Python 3.11.3
サンプルコード
from typing import Type
class User:
def __init__(self, name: str) -> None:
self.name = name
def deco(User: Type[User]):
# これがコンストラクタの代わりのように振る舞う
def func(name):
return User(name + "!")
return func
if __name__ == "__main__":
# これだけだと内部の func はコールされない
DecoUser = deco(User)
# 実際にオブジェクトを生成する (デコレートされたクラスを使用する) と func を通る
user = DecoUser("hawk")
# ! マークが付与されていることが確認できる
print(user.name)
最後に
デコレータは関数だけではなくクラス自体にも使えます
デコレータというよりかは内部関数 (クロージャ) の使い方かもしれませんが
0 件のコメント:
コメントを投稿