User 클래스가 있다.
class User:
def __init__(self, name):
self.name= name
self.is_logged_in= False
User 클래스에서 new_user 객체를 생성한다.
new_user = User("Olivia")
user라는 파라미터를 하나 가지는 create_my_post 함수를 만든다.
def create_my_post(user):
print(f"이것은 {user.name}의 게시글입니다.")
실제로 create_my_post 함수를 호출할 때는,
파라미터로 new_user 객체를 넣는다.
create_my_post(new_user)
데코레이터 함수를 만들어보자.
is_authenticated_decorator 함수이며, 함수 func을 파라미터로 받는다.
이 데코레이터 함수의 역할은 is_logged_in이 True인 경우에만 func 함수가 실행되도록 하는 것이다.
def is_authenticated_decorator(func):
def wrapper():
if user.is_logged_in==True:
func()
return wrapper
그런데, 아래의 코드를 실행해보면 에러가 발생한다.
@is_authenticated_decorator
def create_my_post(user):
print(f"이것은 {user.name}의 게시글입니다.")
왜냐면 create_my_post는 하나의 파라미터를 가지고 있는데,
위의 코드에서는 func에 파라미터가 없이 호출되기 때문이다.
그래서 파라미터를 넣어줘야 하는데, 이때 쓰는 것이 *args와 **kwargs이다.
*args 가변인수 ----->> 더알고 싶다면 클릭
**kwargs 키워드가변인자 ----->> 더알고 싶다면 클릭
def is_authenticated_decorator(func):
def wrapper(*args, **kwargs):
if args[0].is_logged_in==True:
func(args[0])
return wrapper
그 다음 데코레이터 함수를 실행시키면 에러가 나지 않는다.
@is_authenticated_decorator
def create_my_post(user):
print(f"이것은 {user.name}의 게시글입니다.")
new_user 객체의 is_logged_in을 True로 바꾸어주고 난 후, 함수를 실행하면
에러 없이 결과가 나온다.
new_user.is_logged_in=True
create_my_post(new_user)
>>이것은 Olivia의 게시글입니다.
<최종코드>
class User:
def __init__(self, name):
self.name= name
self.is_logged_in= False
def is_authenticated_decorator(func):
def wrapper(*args, **kwargs):
if args[0].is_logged_in==True:
func(args[0])
return wrapper
@is_authenticated_decorator
def create_my_post(user):
print(f"이것은 {user.name}의 게시글입니다.")
new_user = User("Olivia")
new_user.is_logged_in=True
create_my_post(new_user)
'파이썬 > 파이썬(python) 중급' 카테고리의 다른 글
pycharm에 tensorflow, keras 설치하기, msvcp140.dll or msvcp140_1.dll 에러, 시스템 운영체제 확인 (0) | 2023.03.11 |
---|---|
*args 인자가 있는 데코레이터 함수 실습하기 (0) | 2022.11.10 |
데코레이터, 일급 객체, 중첩함수, 데코레이터 함수 만드는 방법 (0) | 2022.11.02 |
[39-5 파이썬] sheety API +tequila API (0) | 2022.10.04 |
[39-3 파이썬] sheety API 사용하는 방법 (1) | 2022.10.04 |