λ°μ½λ μ΄ν°λ μ¬μ μ μλ―Έλ‘ "μ₯μκ°"λΌλ μλ―Έλ₯Ό κ°μ§κ³ μμ΅λλ€. νμ΄μ¬μ Objectλ₯Ό κΎΈλ©°μ£Όλ μν μ νκ³ μμ΅λλ€. μ ννλ ν¨μλ₯Ό μΈμλ‘ λ°λ κ°μ²΄μ
λλ€. ν΄λμ€ μ±ν°μμ @staticmethodλ‘ μκ°κ° λμμ΄μ.
μ
λ ₯
def decorator(printname_func): #3 def wrapper(w_name): #5 print("μ΄λ κ² Object μμλ μ€νν μ μμ΅λλ€.") printname_func(w_name) #6 print("μ΄λ κ² Object λ€μλ μ€νν μ μμ΅λλ€.") return wrapper #4 @decorator #2 def printname(name): #7 print(name) printname('leehojun') #1
Β
μΆλ ₯
μ΄λ κ² Object μμλ μ€νν μ μμ΅λλ€. leehojun μ΄λ κ² Object λ€μλ μ€νΌν μ μμ΅λλ€.
Β
μμ μ½λμμ ν¨μμ νΈμΆμ΄ #1μμ μΌμ΄λ©λλ€. κ·Έλ¬λ©΄ ν¨μλ₯Ό νΈμΆν΄μΌ νλλ° μμ λ°μ½λ μ΄ν°κ° μμΌλ―λ‘ #2λ₯Ό μ€ννκ² λ©λλ€. #3μμ νλΌλ―Έν°λ‘ λ°κ³ μλ κ²μ ν¨μμ
λλ€. #4μμ return κ°μΌλ‘ wrapperλ₯Ό νΈμΆνκ³ μμΌλ―λ‘ #5λ‘ κ°κ² λ©λλ€. μ¬κΈ°μ νλΌν€ν°λ‘ λ°κ³ μλ κ²μ #1μ μκ·λ¨ΌνΈμ
λλ€. #6 μ λ€λ‘ print ν¨μλ₯Ό λ£μ΄ μλμ λ€μν ν¨μλ₯Ό λ§λΆμΌ μ μλ€λ κ²μ 보μ¬λλ¦¬κ³ μμ΅λλ€. #6μμ #7ν¨μκ° νΈμΆλκ³ μ€νμ΄ λ©λλ€.
Β
print(printname) <funtion decorator.<locals>.wrapper at 0x0338B8E8>
Β
μ μ½λμμ μ μ μλ―μ΄ λ°μ½λ μ΄ν°κ° μ₯μνκ³ μλ ν¨μλ λ°μ½λ μ΄ν°μ wrapperλ₯Ό κ°λ¦¬ν€κ³ μμ΅λλ€.
Β
λ°μ½λ μ΄ν°λ ν¨μλ₯Ό μ’ λ μ§κ΄μ μΌλ‘ λ³νμν¬ μ μμ΅λλ€. μλ₯Ό λ€μ΄ Django κ°μ Python WEB frameworμμ λ‘κ·Έμν μ¬μ©μμκ²λ§ ν¨μμ κΆνμ νλ½ν λ @authκ°μ΄ μ¬μ© ν μ μμ κ²μ
λλ€.
Β
νμ΄μ¬ ν¨μμ νΉμ§
νμ΄μ¬ ν¨μλ μΌκΈ κ°μ²΄(First class object)μ
λλ€. νμ΄μ¬μ μΌλ°μ μΌλ‘ λ€λ₯Έ κ°μ²΄λ€μ μ¬μ©λμλ μ°μ°λ€μ λλΆλΆ μ§μνμ£ . μλμ κ°μ΄ λμ
μ°μ°μ μλ‘ λ€μ΄λ³΄κ² μ΅λλ€.
Β
a = 10
Β
μμ aλ objectμ΄κ³ 10λ objectλΌλ κ²μ μ€μ΅μΌλ‘ μκ³ κ³μ€ κ²μ
λλ€. typeμ΄λΌλ μ°μ°μλ₯Ό ν΅ν΄ μλ €λλ Έμμ£ .
Β
def printhello(): #1 print("hello") hello=printhello #2
Β
μ¬κΈ°μ printhello ν¨μλ νλμ objectκ° λ©λλ€. helloλΌλ λ³μλ objectμ΄μ£ . κ·Έλ¬λ ν¨μλ₯Ό λμ
νλ μ°μ°λ κ°λ₯ν©λλ€.
Β
>>>hello() hello
Β
μΈμκ°λ λμΌνκ² μ λ¬μ΄ λ©λλ€.
Β