假设我有这个 Cython 课程,如下所示:
cdef class MyClass:
cdef readonly object _value
def __cinit__(self, value):
self._value = value
cpdef forget_self(self):
# what should I write here?
Python 中所需的行为应该如下所示:
>>> my_class = MyClass(5)
>>> my_class._value
... 5
>>> my_class.forget_self()
>>> my_class
... # NameError raised here
我看到了
_Py_ForgetReference
(https://github.com/python/cpython/blob/33838fedf7ed6ee907a49d042f8fa123178a1f9c/Objects/object.c#L2226),但只有当#ifdef Py_TRACE_REFS
被激活时它才会被激活。
如果提高
NameError
是不可能,那么我希望MyClass.forget_self()
设置self
,即将MyClass
到None
的对象,会Py_SETREF
(https://github.com) /python/cpython/blob/main/Include/cpython/object.h#L326)就足够了吗?
这是不可能的。 Python 引用不是这样工作的。