【问题标题】:Python cannot create instancesPython 无法创建实例
【发布时间】:2009-02-07 01:39:29
【问题描述】:

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

我的目标是能够在 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;
}

【问题讨论】:

    标签: python pycxx


    【解决方案1】:

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

    【讨论】:

    • 我认为你是对的。他必须在某处“注册”名字 Kitty 作为类型
    猜你喜欢
    • 1970-01-01
    • 2020-01-16
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多