python调用运算符_Cython如何正确调用引用运算符

这篇博客讨论了在Cython中包装C++代码时遇到的问题,特别是关于如何正确调用C++的乘法运算符(*)以实现Python与C++对象之间的交互。作者在尝试使用`mul_mm`函数实现`SymbolicMonomial`类的乘法操作时遇到了类型转换错误。博客寻求解决在Cython中进行C++运算符重载的方法,并分享了已有的类定义和方法,包括`__mul__`特殊方法。
摘要由CSDN通过智能技术生成

我在Cython包装中有以下代码到C++代码:# distutils: language = c++

# distutils: sources = symbolic.cpp

from libcpp.vector cimport vector

from libcpp.pair cimport pair

from libcpp.string cimport string

from libcpp cimport bool

cdef extern from "symbolic.h" namespace "metadiff::symbolic":

cdef cppclass SymbolicMonomial:

vector[pair[int, int]] powers

long long coefficient;

SymbolicMonomial()

SymbolicMonomial(long)

SymbolicMonomial(const SymbolicMonomial&)

bool is_constant()

long long int eval(vector[int]&)

long long int eval()

string to_string()

string to_string_with_star() const

cdef SymbolicMonomial mul_mm"operator*"(const SymbolicMonomial&, const SymbolicMonomial&)

# SymbolicMonomial operator*(long long, const SymbolicMonomial&)

# SymbolicMonomial operator*(const SymbolicMonomial&, long long)

cdef class SymMonomial:

cdef SymbolicMonomial* thisptr # hold a C++ instance which we're wrapping

def __cinit__(self):

self.thisptr = new SymbolicMonomial()

def __cinit__(self, int value):

self.thisptr = new SymbolicMonomial(value)

def __dealloc__(self):

del self.thisptr

def is_constant(self):

return self.thisptr.is_constant()

def eval(self):

return self.thisptr.eval()

def __str__(self):

return self.to_string_with_star()

def to_string(self):

return self.thisptr.to_string().decode('UTF-8')

def to_string_with_star(self):

return self.thisptr.to_string_with_star().decode('UTF-8')

def __mul__(self, other):

return mul_mm(self.thisptr, other)

def variable(variable_id):

monomial = SymMonomial()

monomial.thisptr.powers.push_back((variable_id, 1))

return monomial

但是,我始终没有弄清楚如何正确调用mul_mm方法。它一直在说Cannot convert 'SymbolicMonomial' to Python object,反之亦然。问题是我需要能用这种方法乘以两个对称性。但是由于某些原因,我无法掌握如何正确地做这件事的诀窍。有什么建议吗?在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值