0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python のデコレータの実装例

Last updated at Posted at 2025-04-26

Python のデコレータの実装方法のメモ。

デコレータの定義

デコレータは以下のように定義する。

def dec(func):
    def wrapper(*args, **kwargs):
        func(*args, **kwargs)

    return wrapper

デコレータの使用例

@dec
def test1():
  print("test1()")
  return 0

デコレータ例

以下はデコレータの実装例。
@log はメソッドが実行された時刻を表示する。
@args_ret はメソッドの引数とレスポンスを表示する。

import time


def log(func):
    def wrapper(*args, **kwargs):
        name = func.__name__
        print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] {name} begin")
        res = func(*args, **kwargs)
        print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] {name} end")

    return wrapper


def args_ret(func):
    def wrapper(*args, **kwargs):
        name = func.__name__
        print(f"{name} {str(args)}, {str(kwargs)}")
        res = func(args, kwargs)
        print(f"{name} ret:  {str(res)}")

    return wrapper

プログラム例

from decorator1 import log, args_ret


@log
def test1():
    print('test1()')
    time.sleep(1.0)
    obj = 'abc'
    return obj


@args_ret
def test2(a, b, arg1=None, arg2=None):
    print('test2()')
    obj = {'a': a, 'b': b, 'arg1': arg1, 'arg2': arg2}
    return obj


test1()
test2(1, 2, arg1='abc', arg2='def')

実行結果

[2025-04-26 23:35:09] test1 begin
test1()
[2025-04-26 23:35:10] test1 end
test2 (1, 2), {'arg1': 'abc', 'arg2': 'def'}
test2()
test2 ret:  {'a': (1, 2), 'b': {'arg1': 'abc', 'arg2': 'def'}, 'arg1': None, 'arg2': None}
0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?