我对默认构造函数的Cython用法有一个问题。在
我的C++类节点是下面的
Node.h
class Node
{
public:
Node()
{
std::cerr << "calling no arg constructor" << std::endl;
w=0.0;
d=0.0;
}
Node(double val, double val2);
{
std::cerr << "calling 2 args constructor" << std::endl;
this->w=val;
this->d=val2;
}
private:
double d,w;
}
用Cython包装,如下所示
^{pr2}$Cython代码编译得很好,但特别是从Python调用时
from pyNode import pyNode as Node
n=Node(1.0,2.0)
我得到了预期的calling 2 args constructor
字符串,但是如果我试图使用“no arguments”构造函数从python声明一个Node对象(应该正确地声明为__cinit__(self)
),我没有得到任何输出,这意味着没有调用无参数构造函数!在
如何从包装类的cinit方法显式地调用它?在
这里的问题是不能像这样重载} functions can be overloaded )——相反,让它取默认值,然后根据需要调用正确的东西。在
__cinit__()
(如only ^{编辑:实际上,您需要以一种更接近于普通Python代码的方式实现函数,而不是使用重载:
当然,这假设
^{pr2}$-1
是一个对函数没有用处的值,您可以使用另一个值,或者如果您需要double的每个值都有效,那么您可能需要删除类型,使用Python对象,以便可以使用None
作为默认值:相关问题 更多 >
编程相关推荐