Python Cython-检查对象的类型

Python Cython-检查对象的类型,python,cython,Python,Cython,如何检查cython中python对象的类型 我的Cython扩展名E在模块M中编译为E.pyd 我试图检查Cython扩展E的class a中python参数的类型 cdef class A: def foo(self, bar): if bar is A: print("ok") else print("invalid") 问题是当我使用python的扩展时 from M import E a = A(

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

我的Cython扩展名
E
在模块
M
中编译为
E.pyd

我试图检查Cython扩展
E
class a
中python参数的类型

cdef class A:
    def foo(self, bar):
        if bar is A:
            print("ok")
        else
            print("invalid")
问题是当我使用python的扩展时

from M import E
a = A()
b = A()
a.foo(b)
当我使用Python中的
type(b)
时,bar不是A,而是
M.E.A


我试过在Cython中使用
如果bar是M.E.A:
,但编译器抱怨
未声明的名称不是内置的:M
,因为Cython不知道模块。

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

  • 你应该写:

    if isinstance(bar, A):
        ...
    
    如果要检查
    bar
    是否属于
    A
    类型或其任何子类型

  • if type(bar) is A:
        ...
    
    如果要检查是否为
    条形图
    的类型正是
    A

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

def foo(self, A bar):
这也允许用户传递
None
表示没有对象。如果要排除
None
写入:

def foo(self, A bar not None):