메서드 데코레이터를 작성 중이며 현재 데코 레이팅 된 메서드를 정의하는 클래스에 액세스해야합니다.클래스 포함 메서드 받기
이 문제는 클래스의 파이썬 3 메소드가 클래스가 인스턴스화되지 않는 한 단지 함수라고 보입니다.
이 문제가 발생합니까? 시 방법에 대한 당신의 장식이 실행되기 때문에 정말 클래스가을 만들 수 아직, 당신은 할 수 없습니다 ... __qualname__
주변에 바이올린 을
In [29]: class A:
....: def B(self):
....: pass
....:
In [30]: A.B.__qualname__
Out[30]: 'A.B'
# This is what I want:
>>> get_class(A.B)
A
대신 클래스 데코레이터를 만들지 않으시겠습니까? 클래스 본문에 함수를 꾸미면 * 클래스가 아직 생성되지 않습니다 *. –
@MartijnPieters 데코레이터가 데코 레이팅 된 메소드 *의 의미를 포함하는 클래스 *에 비례하므로 변경합니다. '@decorate ("some_method") \ nclass Foo : ...는 매우 반 직관적 인 것처럼 보입니다. 대안이 없다면 커스텀 기본 클래스 나 메타 클래스를 만들고 거기에있는 모든 메소드의 속성을 검사 할 것입니다. 아니면 비슷한. – dom0
@ Michael0x2a : 아니, 올바른 복제가 아닙니다. 메소드의 함수 장식자는 모든 함수가 정의 될 때까지 클래스 객체가 없으므로 * 아직 * 클래스를 결정할 수 없습니다. –