파이썬에서 메소드 객체 만 주어진 메소드가 포함 된 클래스에 액세스 할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/649329

  •  19-08-2019
  •  | 
  •  

문제

나는 Python을 처음 접했고 온라인 검색 에서이 질문에 대한 답을 찾을 수 없었습니다.

다음은 아무것도하지 않는 데코레이터입니다 (아직)

def my_decorator(text):
  def wrap(f):
    # grab magic f.parent_class_object.my_var and append text
    def wrap_f(*args, **kwargs):
      f(*args, **kwargs)
    return wrap_f
  return wrap

다음은 예제 수업입니다

class MyClass:
  my_var = []

  @my_decorator('sometext')
  def my_func()
    # do some super cool thing

내 데코레이터에서 클래스 객체에 액세스하고 싶습니다. MyClass 그리고 'sometext'를 추가하십시오 MyClass.my_var 목록. 내 목표는 my_var를 장식 된 값으로 채우는 것입니다. 모듈로드 시간, 기능 호출 시간이 아닙니다.

내가 탐색 할 수있는 방법이 있습니까? f 에게 MyClass 이것을하기 위해? *args [0]은 MyClass의 인스턴스이지만 함수가 호출 될 때만 사용할 수 있습니다.

도움이 되었습니까?

해결책

클래스가 컴파일되는 동안 "메소드"는 여전히 정상적인 기능이기 때문에 클래스 데코레이터 내의 함수에서 읽을 수 없습니다. 또한 클래스 이름은 컴파일되는 동안 정의되지 않았습니다.

당신이 할 수있는 일은 공급하는 것입니다 my_var 데코레이터에 나열하십시오.

class MyClass:
    my_var = []

    @my_decorator(my_var, 'sometext')
    def my_func()
        # do some super cool thing

my_var 그때까지는 여전히 정상적인 변수입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top