Python Cython-检查对象的类型
如何检查cython中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(
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):
看