Python无法创建实例
问题描述:
我正在尝试使用PyCXX创建一个简单的Python扩展。我正在编译我的Python 2.5安装。Python无法创建实例
我的目标是能够做到在Python如下:
import Cats
kitty = Cats.Kitty()
if type(kitty) == Cats.Kitty:
kitty.Speak()
但每次我试图,这是我的错误:
TypeError: cannot create 'Kitty' instances
它不看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;
}
答
我do'nt看到它的代码,但诸如此类的事情通常意味着它不能创建一个实例,这意味着它不能找到一个构造函数。你确定你有一个正好匹配预期的签名?
你说得对,我想。他必须在某处“注册”Kitty的名字 – Emiliano 2009-02-11 16:24:09