귀하는이 문서에 대해 의문의 여지가 있습니다. 나는 설명을 찾기 위해 CPython sources을 살펴 보았지만 경고를 받았다. 나는 전문가가 아니다. 그러니 내가 구현에 무언가, 또는 아무것도를 잃었
v = class_lookup(inst->in_class, name, &klass);
if (v != NULL) {
f = TP_DESCR_GET(v->ob_type);
if (f != NULL) {
PyObject *w = f(v, (PyObject *)inst, (PyObject *)(inst->in_class));
}
}
모순 된 (새로운 스타일의 객체가 필요합니다 나의 이해에서
는 __get__
호출이 instance_getattr2
(선택 추출물)에서 발생 조회 및 설명 속성 문서).
기록을 위해 필자는 새로운 스타일 클래스 객체에 대한 설명자 호출을 제한하기 위해 Python을 다시 컴파일하려고 시도했지만 실제적으로 거대한 엉망이되었습니다. 이 과정에서 클래스 메서드 자체가 설명자로 구현된다는 것을 알게되었습니다.이 메서드는 사용법에 따라 바인딩 된 메서드 개체 나 바인딩되지 않은 메서드 개체를 반환하는 데 사용되는 메커니즘입니다. 예를 들어 :
>>> class A:
... def foo():
... pass
...
>>> A.foo.__get__(None, A)
<unbound method A.foo>
>>> A.foo.__get__(A(), A)
<bound method A.foo of <__main__.A instance at 0x000000000229CC48>>
결과
, 또한 방법을 방해하는 이전 스타일의 객체 나 클래스의 속성에 대한 설명 호출을 방지하는 최소한의 CPython 구현, 그들을 부르는 것 같다.
다시 한번 나는 전문가가 아니며 파이썬 구현에 들어가기는 이번이 처음이므로 잘못 될 수 있습니다. 나는 이것을 명확히하기 위해 an issue을 신청했다.
'설명자'는 새로운 스타일의 클래스이기 때문에. – martineau