Đố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à
NonehoặcNULL. 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,NonehoặcNULL, điều này sẽ trả vềNULLvà tăngTypeError.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à
NonehoặcNULL. 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,NonehoặcNULL, điều này sẽ trả vềNULLvà tăngTypeError.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
NULLvà 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_deallocgọ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_deallocgọ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ọiPyObject_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.