Cython - 检查对象类型

rat*_*ile 2 python cython

如何在 cython 中检查 python 对象的类型?

我的 Cython 扩展E编译到E.pyd一个模块内M

我正在尝试检查class ACython extension 中python 参数的类型E

cdef class A:
    def foo(self, bar):
        if bar is A:
            print("ok")
        else
            print("invalid")
Run Code Online (Sandbox Code Playgroud)

问题是当我去使用 python 的扩展时,

from M import E
a = A()
b = A()
a.foo(b)
Run Code Online (Sandbox Code Playgroud)

bar 不是 A,而是M.E.A当我使用type(b)Python 时

if bar is M.E.A:在 Cython 中尝试过,但编译器抱怨undeclared name not builtin: M,因为 Cython 不知道该模块。

hiv*_*ert 6

在 Cython 和 Python 中is都是对象标识。它不用于检查类型。

或者Cython通过以下方式提供类型检查:

def foo(self, A bar):
Run Code Online (Sandbox Code Playgroud)

这允许用户通过也None意味着没有对象。如果要排除None写入:

def foo(self, A bar not None):
Run Code Online (Sandbox Code Playgroud)

请参阅有关扩展类型的 Cython 文档