python3 class clear,什么是PyClass_New相当于在Python 3?

Previously I have created some Python classes using C API. When I'm going to build the old project with Python 3+ it gives following compile error

PyClass_New was not declared in this scope

Py_InitModule was not declared in this scope

What are the equivalents?

PyObject *pClassDic = PyDict_New();

PyObject *pClassName = PyBytes_FromString("MyClass");

PyObject *pClass = PyClass_New(NULL, pClassDic, pClassName);

解决方案

If you don't want to go through the hassle of setting up your object and type structs, you should be able to create a new class by calling Python's type(name, bases, dict) from C:

PyObject *pClassName = PyBytes_FromString("MyClass");

PyObject *pClassBases = PyTuple_New(0); // An empty tuple for bases is equivalent to `(object,)`

PyObject *pClassDic = PyDict_New();

// pClass = type(pClassName, pClassBases, pClassDic)

PyObject *pClass = PyObject_CallFunctionObjArgs(PyType_Type, pClassName, pClassBases, pClassDic, NULL);

Py_CLEAR(pClassName);

Py_CLEAR(pClassBases);

Py_CLEAR(pClassDic);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值