Python Cython不使用带参数的双修饰符。有解决办法吗?

Python Cython不使用带参数的双修饰符。有解决办法吗?,python,cython,python-decorators,cythonize,Python,Cython,Python Decorators,Cythonize,我在对python代码进行Cythonization时遇到了一个问题。我试图重现我遇到的最简单的错误 下面是我想对代码进行cythonize的示例: def some_decorator_和_arg(arg): def装饰器(func): def包装(x): 返回函数(x)+arg 返回包装器 返回装饰器 为某个类设置类() 定义初始化(自): 通过 @静力学方法 @一些带有参数(1)的装饰者 定义某些_方法(a): 归还 打印(some_类().some_方法(1)) 这在纯python中可

我在对python代码进行Cythonization时遇到了一个问题。我试图重现我遇到的最简单的错误

下面是我想对代码进行cythonize的示例:

def some_decorator_和_arg(arg):
def装饰器(func):
def包装(x):
返回函数(x)+arg
返回包装器
返回装饰器
为某个类设置类()
定义初始化(自):
通过
@静力学方法
@一些带有参数(1)的装饰者
定义某些_方法(a):
归还
打印(some_类().some_方法(1))
这在纯python中可以正常工作。但是当我对代码进行cythonize时,它会在运行时抛出一个错误:

打印(some_类().some_方法(1))

TypeError:wrapper()只接受一个参数(给定2个)

编译运行没有问题。如果我用arg(arg=1)编写
@somedecorator\u
我会得到另一个错误:

@带有参数(arg=1)的某个装饰器

TypeError:某些带有参数的装饰程序不接受关键字参数


有人知道解决这个问题的方法吗?

我找到了解决这个问题的最简单方法——将两个(或更多)装饰器的功能组合成一个,那么cython就没有问题了。例如,对于上述情况,我将执行以下操作:

def some_decorator_和_arg(arg):
def装饰器(func):
def包装(x):
返回函数(x)+arg
返回包装器
返回装饰器
#将创建的装饰器与staticmethod功能结合起来
def静态方法组合(*args,**kwargs):
返回lambda func:staticmethod(一些带有参数(*args,**kwargs)(func)的装饰符)
为某个类设置类()
定义初始化(自):
通过
@静态法(1)
定义某些_方法(a):
归还
打印(some_类().some_方法(1))
关键字参数的问题可以通过在cythonizing
始终\u allow\u keywords=True时提供标志来解决,仅供参考: