我该如何在cython中覆盖rmul方法?
例如,在Python中,以下代码可以正常运行:
但是,如果我在Cython中实现相同的代码,它就无法正常工作。
cclass.pyx
我收到了这个错误。
例如,在Python中,以下代码可以正常运行:
class PyFoo:
def __init__(self):
self.a = 4
def __mul__(self,b): return b*self.a
def __rmul__(self,b): return self*b
Pynew = PyFoo()
print " Python "
print Pynew*3 # I got 12
print 3*Pynew # I got 12
但是,如果我在Cython中实现相同的代码,它就无法正常工作。
cclass.pyx
cimport cython
cdef class Foo:
cdef public int a
def __init__(self):
self.a = 4
def __mul__(self,b): return b*self.a
def __rmul__(self,b): return self*b
test.py
import cclass as c
Cnew = c.Foo()
print " Cython "
print Cnew*3 # This works, I got 12
print 3*Cnew # This doesn't
我收到了这个错误。
Traceback (most recent call last):
File "test.py", line 22, in <module>
print 3*Cnew
File "cclass.pyx", line 8, in cclass.Foo.__mul__ (cclass.c:763)
def __mul__(self,b): return b*self.a
AttributeError: 'int' object has no attribute 'a'
我不理解在Cython中使用相同的rmul实现有什么问题。