1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
# mode: run
# tag: tpflags, type_version_tag
cimport cython
cdef extern from *:
unsigned long PY_VERSION_HEX
unsigned long Py_TPFLAGS_HAVE_VERSION_TAG
ctypedef struct PyTypeObject:
unsigned long tp_flags
def test_flag(t):
return ((<PyTypeObject*>t).tp_flags & Py_TPFLAGS_HAVE_VERSION_TAG) != 0
cdef class ImplicitAttrCache(object):
"""
>>> flag = test_flag(ImplicitAttrCache)
>>> print(flag)
True
"""
cdef public int x
cdef object y
@cython.type_version_tag(True)
cdef class ExplicitAttrCache(object):
"""
>>> flag = test_flag(ImplicitAttrCache)
>>> print(flag)
True
"""
cdef public int x
cdef object y
@cython.type_version_tag(False)
cdef class NoAttrCache(object):
"""
>>> test_flag(NoAttrCache)
False
"""
cdef public int x
cdef object y
|