# Objetos de referencia débil

Python soporta referencias débiles como objetos de primera clase. Hay dos tipos de objetos específicos que implementan directamente referencias débiles. El primero es un objeto con referencia simple, y el segundo actúa como un proxy del objeto original tanto como pueda.

int PyWeakref_Check(PyObject *ob)

  Retorna un valor distinto de cero si ob es una referencia o un objeto proxy. Esta función siempre finaliza con éxito.

int PyWeakref_CheckRef(PyObject *ob)

  Return non-zero if ob is a reference object or a subclass of the reference type. This function always succeeds.

int PyWeakref_CheckRefExact(PyObject *ob)

  Return non-zero if ob is a reference object, but not a subclass of the reference type. This function always succeeds.

int PyWeakref_CheckProxy(PyObject *ob)

  Retorna un valor distinto de cero si ob es un objeto proxy. Esta función siempre finaliza con éxito.

PyObject *PyWeakref_NewRef(PyObject *ob, PyObject *callback)
  Return value: New reference. Part of the Stable ABI.

  Return a weak reference object for the object ob. This will always return a new reference, but is not guaranteed to create a new object; an existing reference object may be returned. The second parameter, callback, can be a callable object that receives notification when ob is garbage collected; it should accept a single parameter, which will be the weak reference object itself. callback may also be `None` or `NULL`. If ob is not a weakly referenceable object, or if callback is not callable, `None`, or `NULL`, this will raise `TypeError` and return `NULL`.

  Distinto en la versión 3.16.0a0 (unreleased): Raise `TypeError` if callback is not callable, `None`, or `NULL`.

  Ver también

  `PyType_SUPPORTS_WEAKREFS()` for checking if ob is weakly referenceable.

PyObject *PyWeakref_NewProxy(PyObject *ob, PyObject *callback)
  Return value: New reference. Part of the Stable ABI.

  Return a weak reference proxy object for the object ob. This will always return a new reference, but is not guaranteed to create a new object; an existing proxy object may be returned. The second parameter, callback, can be a callable object that receives notification when ob is garbage collected; it should accept a single parameter, which will be the weak reference object itself. callback may also be `None` or `NULL`. If ob is not a weakly referenceable object, or if callback is not callable, `NULL`, this will raise `TypeError` and return `NULL`.

  Distinto en la versión 3.16.0a0 (unreleased): Raise `TypeError` if callback is not callable, `None`, or `NULL`.

  Ver también

  `PyType_SUPPORTS_WEAKREFS()` for checking if ob is weakly referenceable.

int PyWeakref_GetRef(PyObject *ref, PyObject **pobj)
  Part of the Stable ABI since version 3.13.

  Obtiene un strong reference al objeto referenciado desde una referencia débil, ref, en *pobj.

  - En caso de éxito, asigna *pobj en un nuevo strong reference al objeto referenciado y retorna 1.

  - Si la referencia está inactiva, asigna *pobj a `NULL` y retorna 0.

  - En caso de error, lanza una excepción y devuelve -1.

  Added in version 3.13.

int PyWeakref_IsDead(PyObject *ref)

  Test if the weak reference ref is dead. Returns 1 if the reference is dead, 0 if it is alive, and -1 with an error set if ref is not a weak reference object.

  Added in version 3.14.

void PyObject_ClearWeakRefs(PyObject *object)
  Part of the Stable ABI.

  Esta función es invocada por el gestor `tp_dealloc` para limpiar referencias débiles.

  Esto recorre las referencias débiles de object e invoca retrollamadas para aquellas referencias que tengan una. Retorna cuando se han intentado todas las retrollamadas.

void PyUnstable_Object_ClearWeakRefsNoCallbacks(PyObject *object)
  This is Unstable API. It may change without warning in minor releases.

  Borra las referencias débiles para object sin llamar a las retrollamadas.

  Esta función es invocada por el gestor `tp_dealloc` para tipos con finalizadores (i.e., `__del__()`). El gestor de esos objetos primero llama a `PyObject_ClearWeakRefs()` para borrar las referencias débiles y llamar a sus callbacks, luego al finalizador, y finalmente a esta función para borrar cualquier referencia débil que pueda haber sido creada por el finalizador.

  En la mayoría de los casos, es más apropiado utilizar `PyObject_ClearWeakRefs()` para borrar las referencias débiles en lugar de esta función.

  Added in version 3.13.