python 장식기, python 장식기가 어떻게 된 일인지 알 수 있게 해줍니다!!!
,
이 정의 함수는 내가 조금 통속화되었다. 그렇지 않으면 더욱 이해할 수 없다. 사실 나는 장식기를 설명할 수 있는 더 개괄적인 한 마디가 있다.
( 、 ) ,
여기 너 헷갈릴지도 몰라, 못 알아봐도 괜찮아, 우리 천천히 하자!!!우선, 장식기의 문법은 네가 틀림없이 알고 있을 것이다
def decorator(f):
def wrapper(x,y):
return x+y
return wrapper
@decorator
def func(x,y):
return 1
func(3,4)
그럼, 이 코드를 보면 위에 몇 가지 의문이 있을 수 있습니다. 하나, decorator가 무슨 뜻입니까?2. 여기서 재구성하는 행위는 무엇입니까?3. 전체적인 장식 행위 또는 절차는 어떻습니까?
우리는 위의 코드를 보았는데, 분명히 장식기는 호출 가능한 대상이라고 말했는데, 이것은 문제없다. 위의 장식기는 바로 함수이다.재구성하는 행위는 무엇입니까?위의 코드의 재구성 행위는func의 실행 코드가 wrapper의 실행 코드로 바뀌었다는 것이다. 즉, 코드의 최종 입력은 1이 아니라 7이다.
사실 위의 두 가지 문제는 쓸데없는 말이다. 우리는 세 번째 문제를 해결하고 자연스레 이해했다!자, 계속 보기 전에 우리는 장식기 자체가 장식된 대상을 받아들이고, 장식기가 되돌아오는 호출 가능한 대상은 장식된 대상의 모든 파라미터를 받아들인다는 말을 기억한다.
이 말을 꼭 자세히 보고 이해하고 기억해라!위에 있는 코드에서
장식기: decorator가 되돌아오는 호출 대상은: wrapper가 장식된 대상은:func
자, 우선 이것을 묶고 이 함수의 집행 절차를 보아라.
물론, 이때 당신은 또 하나의 의문을 가지게 될 것이다.func(3,4)를 호출할 때 무슨 일이 발생했는가?이 때: 호출 가능한 대상 (wrapper) 이 func에 되돌아왔습니다. 현재 func의 코드는
def func(x,y):
return x+y
이때의func는 완전히 자신이 정의한func가 아니다. 이것은 어떤 의미에서 재구성된 셈이냐!
여기까지 장식기가 뭔지 이해했지, 이해했지!
하지만 우리는 아직 끝나지 않았다. 왜냐하면 나는 너에게 장식기가 무엇인지 철저히 이해하게 할 것이다!
전에 우리가 말했듯이 함수 장식기뿐만 아니라 클래스 장식기도 있다. 그러면 다음에 클래스 장식기가 어떻게 작동하는지 보자. 나는 이전의 그 말을 여기에 붙여야 한다. 잊지 마라!장식기 자체는 장식된 대상을 받아들이고, 장식기가 되돌아오는 호출 대상은 장식된 대상의 모든 파라미터를 받아들인다
class Decorator:
def __init__(self,f):
self.func = f
def __call__(self,x,y):
return self.func(x,y) + 1
@Decorator
def func(x,y):
return x+y
func(3,4)
# ?
우리 한 걸음 한 걸음 분석해 보자. 우선, 장식기는 장식된 대상만 매개 변수로 받아들인다. 즉, 이때
Decorator(func)
#
#
func(3,4)
# __call__
# :
# 3,4 __call__
# func
return self.func(x,y) + 1
# 8, 7
다음은 좀 어려운 것을 봅시다.
def decorator(f):
def wrapper(self,x,y):
return self.name + x + y
return wrapper
class C:
name = ' '
@decorator
def method(x,y):
return x + y
ins = C()
myname = ins.method(' ',' ')
이 답이 뭔지 생각해볼까요?생각해보면 장식기가 뭔지 알 것 같아!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.