4
我正在嘗試使用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;
}
你說得對,我想。他必須在某處「註冊」Kitty的名字 – Emiliano 2009-02-11 16:24:09