Python decorator / register

jaeha_lee·2022년 5월 4일
0
  • register : 객체(obj)에 func를 등록하는 함수 / 함수를 객체에 등록하기 위한 decorator
    def register(obj,func):
          setattr(obj,func.__name__, func)
    
      def obj_example_func():
          pass
    
      def input_func():
          print("This is input function)
    
       # obj_example_func 객체(함수)에 input_func 함수를 추가함
      register(obj_example_func,input_func)
    
      obj_example_func.input_func()
  • @register(obj_example_func) 이렇게 바꾸기
def register(obj,func=None):
	if func is None: # 인자가 하나만 들어온다면
    	return partial(register,obj) # register(obj,  )
    	 
    setattr(obj,func.__name__, func)
    return func                                                                 

  • Decorator 예제
  • case 1 : 기본 decorator

    def test(func):
        def tt():
            print("HI")
            func()
            print("check")
        return tt
    
    @test # 내 이해용. test에 check를 집어 넣음
    def check(): 
        print("*"*10)
    
    check()

    출력 결과
    HI
    **********
    \heck

  • case 2: decorator 붙일 함수에 인자 넣기

    def test(func):
       def tt(*args,**kwargs):
           print("HI")
           func(*args,**kwargs)
           print("check")
       return tt
    @test
    def check(name):
       print(f"**** {name}")
    check("NAME   ")

    출력 결과
    HI
    **** NAME
    check

  • case 3: decorator에 인자 넣기

    def test(input_):
       def kk(func):
           def tt(*args,**kwargs):
               print("HI")
               print(input_)
               func(*args,**kwargs)
               print("check")
           return tt
       return kk
    @test(input_="hihih")
    def check(name):
       print(f"**** {name}")
    check("NAME   ")

    출력결과
    HI
    hihih
    **** NAME
    check

0개의 댓글