
以 Python 的 C API 擴充 Python
|
755
欄位
tp_flags
是一個
long
,其位元決定了你型別結構(type struct)的
確切布局(layout),主要是為了回溯相容性。將此欄位設為
Py_TPFLAGS_
DEFAULT
來表示你正在定義一個正常的現代型別。如果你的型別支援環狀
廢物回收(cyclic garbage collection),就將
tp_flags
設為
Py_TPFLAGS_
DEFAULT|Py_TPFLAGS_HAVE_GC
。如果你型別的實體含有的
PyObject*
欄位可
能指向任意的物件並形成參考迴圈(reference loop)的一部分,那麼你的
型別就應該支援環狀廢物回收。要支援環狀廢物回收,新增
Py_TPFLAGS_
HAVE_GC
到欄位
tp_flags
是不夠的,你還必須提供適當的函式,由插
槽
tp_traverse
與
tp_clear
表示,並以環狀廢物回收器(cyclic garbage
collector)適當地註冊或註銷你的實體。支援環狀廢物回收是進階的主
題,我們不會在本書中進一步涵蓋,請參閱線上說明文件(
https://docs.
python.org/3/c-api/gcsupport.html
)。同樣地,我們也不涵蓋支援弱參考
(weak references)這種進階主題,線上說明文件已有涵蓋(
https://docs.
python.org/3/extending/newtypes.html#weakref-support
)。