我正在尝试使用Cython转换我的Python模块之一。 Cython成功生成了一个.pyd文件,但是当我尝试导入它时,它失败了:
Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)] on win32
>>> import example
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "example.py", line 6, in init example
@abstractmethod
File "C:\Program Files\Python3\lib\abc.py", line 23, in abstractmethod
funcobj.__isabstractmethod__ = True
AttributeError: attribute '__isabstractmethod__' of 'staticmethod' objects is not writable
我的模块包含一个既抽象又静态的方法:
from abc import abstractmethod
class c:
@abstractmethod
@staticmethod
def foo():
raise NotImplementedError
根据https://docs.python.org/3/library/abc.html#abc.abstractmethod,这应该是可能的。如果删除@abstractmethod批注,则可以进行cythonize并导入该模块。如果我使用@abstractstaticmethod,它也可以工作,但是该装饰器在abc中已弃用。
这是Cython错误,还是我做错了什么? 我在Windows 7上使用Cython版本0.28.5和Visual Studio 2017的构建工具。