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看到它的代码,但诸如此类的事情通常意味着它不能创建一个实例,这意味着它不能找到一个构造函数。你确定你有一个正好匹配预期的签名?

+0

你说得对,我想。他必须在某处“注册”Kitty的名字 – Emiliano 2009-02-11 16:24:09