Python-여러 데코레이터를 사용하여 여러 속성을 설정할 수 없습니다.

앤드류

플라스크 API 경로에서 여러 데코레이터를 사용하고 있으며 해당 데코레이터 (functools 랩) 내에서 속성을 설정하고 있지만 호출되는 첫 번째 데코레이터 내에서만 속성을 설정할 수 있습니다. 호출되는 모든 데코레이터의 속성을 설정하고 참조하는 기능을 갖고 싶습니다.

decorators.py

from functools import wraps

def example_func1(f):
    @wraps(f)
    def decorated(*args, **kwargs):

        setattr(decorated, 'name', 'bill')

        return f(*args, **kwargs)

    return decorated

    
    def example_func2(f):
        @wraps(f)
        def decorated(*args, **kwargs):

            setattr(decorated, 'cookie', 'chocolate')
    
            return f(*args, **kwargs)
    
        return decorated

    
    def example_func3(f):
        @wraps(f)
        def decorated(*args, **kwargs):

            setattr(decorated, 'shoes', 'nike')
    
            return f(*args, **kwargs)
    
        return decorated

플라스크 경로 :

@app.route("/myRoute", methods=["GET", "OPTIONS"])
@example_func1
@example_func2
@example_func3
def my_route():
    print(my_route.name) # this returns 'bill' as expected
    print(my_route.cookie) # stack trace for no attribute
    print(my_route.shoes) # didn't get this far

스택 추적의 오류 메시지 :

AttributeError: 'function' object has no attribute 'cookie'
Joao

setattr다음 def과 같이 decorated방금 정의한 (그리고 반환 할) 함수에 속성을 할당하도록를 이동할 수 있습니다 .

def example_func3(f):
    @wraps(f)
    def decorated(*args, **kwargs):
        return f(*args, **kwargs)
    setattr(decorated, 'shoes', 'nike')
    return decorated

나는 테스트했다 (플라스크 외부), 이것은 나를 위해 작동합니다.

그러나 물론 이것은 질문을합니다 : 왜 내가 필요 decorated하고 @wraps 가 필요 합니까? 글쎄, 나는 당신이 그렇게 확신하지 못합니다. 이것은 나에게도 효과가 있습니다 (다시 플라스크없이) :

from functools import wraps

def example_func1(f):
    f.name = 'bill'
    return f

def example_func2(f):
    f.cookie = 'chocolate'
    return f

def example_func3(f):
    f.shoes = 'nike'
    return f

@example_func1
@example_func2
@example_func3
def func():
    print(f'func: name={func.name}')
    print(f'func: cookie={func.cookie}')
    print(f'func: shoes={func.shoes}')

func()

( setattr통화를 단순화했습니다. )

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Sightly 데이터를 사용하여 데이터 속성을 true 또는 false로 설정할 수 없습니다.

분류에서Dev

Gradle을 사용하여 라이브러리를 설치할 수 없습니다.

분류에서Dev

jquery를 사용하여 여러 li을 추가 할 수 없습니다.

분류에서Dev

Javascript를 사용하여 달러 기호로 끝나는 속성을 어떻게 설정할 수 있습니까?

분류에서Dev

JQuery를 사용하여 특정 요소에 대해 box-shadow CSS 속성을 설정할 수 없습니다.

분류에서Dev

JQuery를 사용하여 특정 요소에 대해 box-shadow CSS 속성을 설정할 수 없습니다.

분류에서Dev

jQuery를 사용하여 여러 선택 상자의 유효성을 검사 할 수 없습니다.

분류에서Dev

클래스 속성 배열, $ this를 사용하여 값을 설정할 수 없습니다.

분류에서Dev

capybara를 사용하여 href에서 사용자 정의 데이터 속성을 읽을 수 없습니다.

분류에서Dev

RelativeLayout을 사용하여 한 줄에 여러 컨트롤을 설정할 수 없습니다.

분류에서Dev

여러 MongoLab 무료 계정을 사용하여 mongodb 클러스터를 생성 할 수 있습니까?

분류에서Dev

Python 용 Azure SDK를 사용하여 Azure Blob의 속성을 설정할 수 없음

분류에서Dev

Python을 사용하여 명령 프롬프트에서 여러 명령을 실행할 수 없습니다.

분류에서Dev

변수를 사용하여 CSS 속성을 변경할 수 없습니다.

분류에서Dev

for 루프를 사용하여 여러 데이터 프레임을 작성하여 Excel 시트 수정

분류에서Dev

Bootstrap 테이블에서 jQuery를 사용하여 데이터 URL 값을 설정할 수 없습니다.

분류에서Dev

Helm을 사용하여 Jenkins를 불러올 수 없습니다.

분류에서Dev

Room 지속성 라이브러리를 사용하여 내 기본 키를 설정하고 자체적으로 "고유성"을 관리 할 수 있습니까?

분류에서Dev

session.Query를 사용하여 여러 속성을 쿼리 할 수 있습니까?

분류에서Dev

JSON 데이터를 사용하여 UITableView 섹션 제목을 설정할 수 없습니다.

분류에서Dev

jquery를 사용하여 선택한 값을 설정할 수 없습니다.

분류에서Dev

Spring Boot + GORM + Gradle을 사용하여 NamingStrategy를 설정할 수 없습니다.

분류에서Dev

`?`를 사용하여 null 및 설정 값을 확인할 수 없습니다.

분류에서Dev

FolderBrowserDialog를 사용하여 비트 맵을 설정할 수 없습니다.

분류에서Dev

레일에 여러 데이터베이스 연결 풀을 사용하여 전환 할 수 있습니까?

분류에서Dev

jquery를 사용하여 만든 여러 양식에서 데이터를 캡처 할 수 없습니다.

분류에서Dev

jquery를 사용하여 양식에서 속성을 설정할 수 없음

분류에서Dev

데이터 프레임 열에 함수를 적용하여 다른 여러 열을 가져옵니다. Pandas Python

분류에서Dev

Outlet 속성을 사용하여 한 컨트롤러에서 다른 컨트롤러로 Segue를 전달할 수 없습니까?

Related 관련 기사

  1. 1

    Sightly 데이터를 사용하여 데이터 속성을 true 또는 false로 설정할 수 없습니다.

  2. 2

    Gradle을 사용하여 라이브러리를 설치할 수 없습니다.

  3. 3

    jquery를 사용하여 여러 li을 추가 할 수 없습니다.

  4. 4

    Javascript를 사용하여 달러 기호로 끝나는 속성을 어떻게 설정할 수 있습니까?

  5. 5

    JQuery를 사용하여 특정 요소에 대해 box-shadow CSS 속성을 설정할 수 없습니다.

  6. 6

    JQuery를 사용하여 특정 요소에 대해 box-shadow CSS 속성을 설정할 수 없습니다.

  7. 7

    jQuery를 사용하여 여러 선택 상자의 유효성을 검사 할 수 없습니다.

  8. 8

    클래스 속성 배열, $ this를 사용하여 값을 설정할 수 없습니다.

  9. 9

    capybara를 사용하여 href에서 사용자 정의 데이터 속성을 읽을 수 없습니다.

  10. 10

    RelativeLayout을 사용하여 한 줄에 여러 컨트롤을 설정할 수 없습니다.

  11. 11

    여러 MongoLab 무료 계정을 사용하여 mongodb 클러스터를 생성 할 수 있습니까?

  12. 12

    Python 용 Azure SDK를 사용하여 Azure Blob의 속성을 설정할 수 없음

  13. 13

    Python을 사용하여 명령 프롬프트에서 여러 명령을 실행할 수 없습니다.

  14. 14

    변수를 사용하여 CSS 속성을 변경할 수 없습니다.

  15. 15

    for 루프를 사용하여 여러 데이터 프레임을 작성하여 Excel 시트 수정

  16. 16

    Bootstrap 테이블에서 jQuery를 사용하여 데이터 URL 값을 설정할 수 없습니다.

  17. 17

    Helm을 사용하여 Jenkins를 불러올 수 없습니다.

  18. 18

    Room 지속성 라이브러리를 사용하여 내 기본 키를 설정하고 자체적으로 "고유성"을 관리 할 수 있습니까?

  19. 19

    session.Query를 사용하여 여러 속성을 쿼리 할 수 있습니까?

  20. 20

    JSON 데이터를 사용하여 UITableView 섹션 제목을 설정할 수 없습니다.

  21. 21

    jquery를 사용하여 선택한 값을 설정할 수 없습니다.

  22. 22

    Spring Boot + GORM + Gradle을 사용하여 NamingStrategy를 설정할 수 없습니다.

  23. 23

    `?`를 사용하여 null 및 설정 값을 확인할 수 없습니다.

  24. 24

    FolderBrowserDialog를 사용하여 비트 맵을 설정할 수 없습니다.

  25. 25

    레일에 여러 데이터베이스 연결 풀을 사용하여 전환 할 수 있습니까?

  26. 26

    jquery를 사용하여 만든 여러 양식에서 데이터를 캡처 할 수 없습니다.

  27. 27

    jquery를 사용하여 양식에서 속성을 설정할 수 없음

  28. 28

    데이터 프레임 열에 함수를 적용하여 다른 여러 열을 가져옵니다. Pandas Python

  29. 29

    Outlet 속성을 사용하여 한 컨트롤러에서 다른 컨트롤러로 Segue를 전달할 수 없습니까?

뜨겁다태그

보관