gpt4 book ai didi

Python 无法创建实例

转载 作者:太空宇宙 更新时间:2023-11-03 11:36:26 27 4
gpt4 key购买 nike

我正在尝试使用 PyCXX 创建一个简单的 Python 扩展.我正在针对我的 Python 2.5 安装进行编译。

我的目标是能够在 Python 中执行以下操作:

import Cats

kitty = Cats.Kitty()

if type(kitty) == Cats.Kitty:
kitty.Speak()

但每次我尝试时,都会出现以下错误:

TypeError:无法创建“Kitty”实例

它确实将 Cats.Kitty 视为类型对象,但我无法创建 Kitty 类的实例,有什么想法吗?

这是我当前的来源:

#include "CXX/Objects.hxx"
#include "CXX/Extensions.hxx"
#include <iostream>

using namespace Py;
using namespace std;

class Kitty : public Py::PythonExtension<Kitty>
{
public:
Kitty()
{
}

virtual ~Kitty()
{
}

static void init_type(void)
{
behaviors().name("Kitty");
behaviors().supportGetattr();

add_varargs_method("Speak", &Kitty::Speak);
}

virtual Py::Object getattr( const char *name )
{
return getattr_methods( name );
}

Py::Object Speak( const Py::Tuple &args )
{
cout << "Meow!" << endl;
return Py::None();
}
};

class Cats : public ExtensionModule<Cats>
{
public:
Cats()
: ExtensionModule<Cats>("Cats")
{
Kitty::init_type();

initialize();

Dict d(moduleDictionary());
d["Kitty"] = Type((PyObject*)Kitty::type_object());
}

virtual ~Cats()
{
}

Py::Object factory_Kitty( const Py::Tuple &rargs )
{
return Py::asObject( new Kitty );
}
};

void init_Cats()
{
static Cats* cats = new Cats;
}


int main(int argc, char* argv[])
{
Py_Initialize();

init_Cats();

return Py_Main(argc, argv);

return 0;
}

最佳答案

我没有在代码中看到它,但通常意味着它无法创建实例,这意味着它找不到构造函数。你确定你有一个 ctor 完全匹配预期的签名吗?

关于Python 无法创建实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/522921/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com