기본을 넘어 데코레이터를 깊이 있게 이해해 봅시다. 데코레이터는 단순히 "추가 레이어"에 관한 것이 아니라 기능에 동적으로 기능을 추가하여 적응력이 뛰어나고 강력하게 만드는 정교한 방법을 제공합니다.
본질적으로 데코레이터는 다른 함수를 인수로 받아들이고 기능을 추가하며 새 함수를 반환하는 고차 함수입니다. 이를 통해 원래 기능을 변경하지 않고 그대로 두고 추가 기능으로 원래 기능을 "장식"할 수 있습니다.
구문 요약:
@decorator_name def my_function(): pass
my_function 앞에 @ decorator_name을 사용하는 것은 다음을 의미하는 약어입니다.
my_function = decorator_name(my_function)
함수 호출 시 로그를 기록하는 간단한 데코레이터를 만들어 보겠습니다.
def log_call(func): def wrapper(*args, **kwargs): print(f"Calling {func.__name__}") return func(*args, **kwargs) return wrapper @log_call def greet(name): print(f"Hello, {name}!") greet("Alice") # Outputs: Calling greet, then Hello, Alice!
데코레이터는 일반적으로 다음 용도로 사용됩니다.
데코레이터에 추가 매개변수가 필요한 경우도 있습니다. 이 경우 데코레이터에 매개변수를 전달하는 외부 함수를 추가합니다.
예:
def repeat(times): def decorator(func): def wrapper(*args, **kwargs): for _ in range(times): func(*args, **kwargs) return wrapper return decorator @repeat(3) def say_hello(): print("Hello!") say_hello() # Outputs "Hello!" three times
여기서,peat는 times 인수를 기반으로 데코레이터를 생성하는 데코레이터 팩토리입니다.
단일 함수에 여러 데코레이터를 쌓아 강력한 동작 체인을 만들 수 있습니다.
예:
def make_bold(func): def wrapper(): return "<b>" + func() + "</b>" return wrapper def make_italic(func): def wrapper(): return "<i>" + func() + "</i>" return wrapper @make_bold @make_italic def greet(): return "Hello!" print(greet()) # Outputs: <b><i>Hello!</i></b>
@make_bold와 @make_italic을 겹쳐서 볼드체와 이탤릭체 태그로 인사합니다.
함수를 꾸밀 때 원래 함수의 메타데이터(예: 이름 및 독스트링)를 보존하고 싶은 경우가 많습니다. functools.wraps를 사용하여 래퍼가 이러한 세부 정보를 덮어쓰지 않도록 하세요.
from functools import wraps def log_call(func): @wraps(func) def wrapper(*args, **kwargs): print(f"Calling {func.__name__}") return func(*args, **kwargs) return wrapper
@wraps(func)는 func의 이름과 문서 문자열이 유지되도록 보장합니다.
데코레이터는 단지 독립형 기능만을 위한 것이 아닙니다. 클래스 메소드와 함께 사용할 수도 있습니다.
예:
@decorator_name def my_function(): pass
require_auth 데코레이터는 access_dashboard 메소드에 대한 액세스를 허용하기 전에 사용자가 인증되었는지 확인합니다.
데코레이터는 Python의 매우 중요한 부분으로, 유연하고 재사용 가능한 방식으로 함수 동작을 향상, 수정 및 제어할 수 있습니다. 코드를 더욱 표현력 있고 모듈화하며 우아하게 만듭니다. 데코레이터를 사용하면 단순히 기능을 추가하는 것이 아니라 코드베이스를 개선하고 풍부하게 할 수 있습니다.
위 내용은 Python 데코레이터: 기능 향상에 대한 더 많은 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!