약한 참조 객체¶
파이썬은 약한 참조를 1급 객체로 지원합니다. 약한 참조를 직접 구현하는 두 가지 구체적인 객체 형이 있습니다. 첫 번째는 간단한 참조 객체이며, 두 번째는 가능한 한 원래 객체의 프락시 역할을 합니다.
-
int PyWeakref_CheckRef(PyObject *ob)¶
ob\가 참조 객체이거나 참조 타입의 하위 클래스인 경우 0이 아닌 값을 반환합니다. 이 함수는 항상 성공합니다.
-
int PyWeakref_CheckRefExact(PyObject *ob)¶
ob 가 참조 객체이지만 참조 타입의 서브클래스는 아닐 경우 0이 아닌 값을 반환합니다. 이 함수는 항상 성공합니다.
-
PyObject *PyWeakref_NewRef(PyObject *ob, PyObject *callback)¶
- 반환값: 새 참조. 상의 안정 ABI.
객체 ob 에 대한 약한 참조 객체를 반환합니다. 이것은 항상 새로운 참조를 반환하지만, 새로운 객체가 생성되리라 보장되는 것은 아닙니다; 기존 참조 객체가 반환될 수 있습니다. 두 번째 매개변수인 callback 은 ob 가 가비지 수집될 때 알림을 받는 콜러블 객체가 될 수 있습니다; 하나의 매개변수를 받아야 하는데, 약한 참조 객체 자체일 것입니다. callback 은 또한
None또는NULL일 수 있습니다. ob 가 약하게 참조할 수 있는 객체가 아니거나, callback 이 콜러블,None, 또는NULL이 아니면, 이 것은TypeError를 발생시키고NULL를 반환합니다.버전 3.16.0a0 (unreleased)에서 변경: callback 이 콜러블이 아니거나,
None, 또는NULL인 경우TypeError를 발생시킵니다.더 보기
ob 가 약한 참조 가능한지 확인하기 위한
PyType_SUPPORTS_WEAKREFS().
-
PyObject *PyWeakref_NewProxy(PyObject *ob, PyObject *callback)¶
- 반환값: 새 참조. 상의 안정 ABI.
객체 ob 에 대한 약한 참조 프록시 객체를 반환합니다. 이것은 항상 새로운 참조를 반환하지만, 새로운 객체가 생성되리라 보장되는 것은 아닙니다; 기존 프록시 객체가 반환될 수 있습니다. 두 번째 매개변수 callback 은 ob 가 가비지 수집될 때 알림을 받는 콜러블 객체가 될 수 있습니다; 하나의 매개변수를 받아야 하는데, 약한 참조 객체 자체일 것입니다. callback 은 또한
None또는NULL일 수 있습니다. ob 가 약하게 참조할 수 있는 객체가 아니거나, callback 이 콜러블,NULL이 아니면, 이 것은TypeError를 발생시키고NULL를 반환합니다.버전 3.16.0a0 (unreleased)에서 변경: callback 이 콜러블이 아니거나,
None, 또는NULL인 경우TypeError를 발생시킵니다.더 보기
ob 가 약한 참조 가능한지 확인하기 위한
PyType_SUPPORTS_WEAKREFS().
-
int PyWeakref_GetRef(PyObject *ref, PyObject **pobj)¶
- 상의 안정 ABI 버전 3.13 이후로.
약한 참조 ref 에서 참조된 객체에 대한 강한 참조 를 *pobj 에 가져오십시오.
성공할 경우, *pobj 를 참조된 객체에 대한 새로운 강한 참조 로 설정하고 1을 반환합니다.
pobj\가
NULL\이면, 아무 작업도 수행되지 않습니다.에러가 발생하면, 예외를 발생시키고 -1을 반환합니다.
Added in version 3.13.
-
int PyWeakref_IsDead(PyObject *ref)¶
약한 참조 ref 가 사장되었는지 테스트합니다. 참조가 사장되었으면 1을, 살아있으면 0을 반환하며, ref 가 약한 참조 객체가 아니면 에러와 함께 -1을 반환합니다.
Added in version 3.14.
-
void PyObject_ClearWeakRefs(PyObject *object)¶
- 상의 안정 ABI.
이 함수는 약한 참조들을 지우기 위해
tp_dealloc핸들러에 의해 호출됩니다.이것은 object 의 약한 참조들을 순회하며, 콜백을 가진 해당 참조들에 대해 콜백을 호출합니다. 모든 콜백 시도가 완료되면 반환됩니다.
-
void PyUnstable_Object_ClearWeakRefsNoCallbacks(PyObject *object)¶
- 이것은 불안정 API. 경고 없이 사소 버전에서 변경될 수 있습니다.
object 의 약한 참조들을 콜백을 호출하지 않고 지웁니다.
이 함수는 최종화기(예:
__del__())가 있는 타입을 위해tp_dealloc핸들러에 의해 호출됩니다. 해당 객체의 핸들러는 먼저 :c:func:`PyObject_ClearWeakRefs`를 호출하여 약한 참조들을 지우고 해당 콜백들을 호출한 다음, 최종화기를 실행하고, 마지막으로 최종화기에 의해 생성되었을 수 있는 모든 약한 참조들을 지우기 위해 이 함수를 호출합니다.대부분의 상황에서, 이 함수 대신 :c:func:`PyObject_ClearWeakRefs`를 사용하여 약한 참조들을 지우는 것이 더 적절합니다.
Added in version 3.13.