파이썬에서 메소드 객체 만 주어진 메소드가 포함 된 클래스에 액세스 할 수 있습니까?
문제
나는 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
그때까지는 여전히 정상적인 변수입니다.
제휴하지 않습니다 StackOverflow