Đối tượng tham chiếu yếu

Python hỗ trợ weak references làm đối tượng hạng nhất. Có hai loại đối tượng cụ thể trực tiếp triển khai các tham chiếu yếu. Đối tượng đầu tiên là một đối tượng tham chiếu đơn giản và đối tượng thứ hai hoạt động như một proxy cho đối tượng ban đầu nhiều nhất có thể.

int PyWeakref_Check(PyObject *ob)

Trả về giá trị khác 0 nếu ob là đối tượng tham chiếu hoặc proxy. Chức năng này luôn thành công.

int PyWeakref_CheckRef(PyObject *ob)

Trả về giá trị khác 0 nếu ob là đối tượng tham chiếu hoặc lớp con của loại tham chiếu. Chức năng này luôn thành công.

int PyWeakref_CheckRefExact(PyObject *ob)

Trả về giá trị khác 0 nếu ob là đối tượng tham chiếu nhưng không phải là lớp con của loại tham chiếu. Chức năng này luôn thành công.

int PyWeakref_CheckProxy(PyObject *ob)

Trả về khác 0 nếu ob là đối tượng proxy. Chức năng này luôn thành công.

PyObject *PyWeakref_NewRef(PyObject *ob, PyObject *callback)
Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định.

Trả về đối tượng tham chiếu yếu cho đối tượng ob. Điều này sẽ luôn trả về một tham chiếu mới, nhưng không đảm bảo tạo ra một đối tượng mới; một đối tượng tham chiếu hiện có có thể được trả về. Tham số thứ hai, callback, có thể là một đối tượng có thể gọi được và nhận thông báo khi ob được thu gom rác; nó phải chấp nhận một tham số duy nhất, tham số này sẽ là đối tượng tham chiếu yếu. callback cũng có thể là None hoặc NULL. Nếu ob không phải là đối tượng có khả năng tham chiếu yếu hoặc nếu callback không thể gọi được, None hoặc NULL, điều này sẽ trả về NULL và tăng TypeError.

Xem thêm

PyType_SUPPORTS_WEAKREFS() để kiểm tra xem ob có khả năng tham chiếu yếu hay không.

PyObject *PyWeakref_NewProxy(PyObject *ob, PyObject *callback)
Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định.

Trả về đối tượng proxy tham chiếu yếu cho đối tượng ob. Điều này sẽ luôn trả về một tham chiếu mới, nhưng không đảm bảo tạo ra một đối tượng mới; một đối tượng proxy hiện có có thể được trả lại. Tham số thứ hai, callback, có thể là một đối tượng có thể gọi được và nhận thông báo khi ob được thu gom rác; nó phải chấp nhận một tham số duy nhất, tham số này sẽ là đối tượng tham chiếu yếu. callback cũng có thể là None hoặc NULL. Nếu ob không phải là đối tượng có khả năng tham chiếu yếu hoặc nếu callback không thể gọi được, None hoặc NULL, điều này sẽ trả về NULL và tăng TypeError.

Xem thêm

PyType_SUPPORTS_WEAKREFS() để kiểm tra xem ob có khả năng tham chiếu yếu hay không.

int PyWeakref_GetRef(PyObject *ref, PyObject **pobj)
Một phần của ABI ổn định kể từ phiên bản 3.13.

Nhận strong reference tới đối tượng được tham chiếu từ tham chiếu yếu, ref, vào *pobj.

  • Nếu thành công, hãy đặt *pobj thành strong reference mới cho đối tượng được tham chiếu và trả về 1.

  • Nếu tham chiếu không hoạt động, hãy đặt *pobj thành NULL và trả về 0.

  • Nếu có lỗi, hãy đưa ra một ngoại lệ và trả về -1.

Added in version 3.13.

PyObject *PyWeakref_GetObject(PyObject *ref)
Giá trị trả về: Tham chiếu mượn. Một phần của ABI ổn định.

Trả về borrowed reference cho đối tượng được tham chiếu từ tham chiếu yếu, ref. Nếu người giới thiệu không còn tồn tại, trả về Py_None.

Ghi chú

Hàm này trả về borrowed reference cho đối tượng được tham chiếu. Điều này có nghĩa là bạn phải luôn gọi Py_INCREF() trên đối tượng trừ khi nó không thể bị hủy trước lần sử dụng cuối cùng của tham chiếu mượn.

Không được dùng nữa kể từ phiên bản 3.13, sẽ bị xóa trong phiên bản 3.15: Thay vào đó hãy sử dụng PyWeakref_GetRef().

PyObject *PyWeakref_GET_OBJECT(PyObject *ref)
Giá trị trả về: Tham chiếu mượn.

Tương tự như PyWeakref_GetObject() nhưng không có tính năng kiểm tra lỗi.

Không được dùng nữa kể từ phiên bản 3.13, sẽ bị xóa trong phiên bản 3.15: Thay vào đó hãy sử dụng PyWeakref_GetRef().

int PyWeakref_IsDead(PyObject *ref)

Kiểm tra xem ref tham chiếu yếu có chết không. Trả về 1 nếu tham chiếu đã chết, 0 nếu tham chiếu còn hoạt động và -1 kèm theo lỗi được đặt nếu ref không phải là đối tượng tham chiếu yếu.

Added in version 3.14.

void PyObject_ClearWeakRefs(PyObject *object)
Một phần của ABI ổn định.

Hàm này được trình xử lý tp_dealloc gọi để xóa các tham chiếu yếu.

Điều này lặp lại thông qua các tham chiếu yếu cho object và gọi lệnh gọi lại cho những tham chiếu có tham chiếu đó. Nó trả về khi tất cả các cuộc gọi lại đã được thử.

void PyUnstable_Object_ClearWeakRefsNoCallbacks(PyObject *object)
Đây là API không ổn định. Nó có thể thay đổi mà không có cảnh báo trong các bản phát hành nhỏ.

Xóa các điểm yếu cho object mà không gọi lại lệnh gọi lại.

Hàm này được trình xử lý tp_dealloc gọi cho các loại có bộ hoàn thiện (tức là __del__()). Trình xử lý cho các đối tượng đó trước tiên gọi PyObject_ClearWeakRefs() để xóa các điểm yếu và gọi các lệnh gọi lại của chúng, sau đó là trình hoàn thiện và cuối cùng là hàm này để xóa mọi điểm yếu có thể đã được tạo bởi trình hoàn thiện.

Trong hầu hết các trường hợp, sẽ thích hợp hơn khi sử dụng PyObject_ClearWeakRefs() để xóa các điểm yếu thay vì chức năng này.

Added in version 3.13.