- 主题:用C++扩展python进行混合编程, C++暴露类给python的问题
在用C++扩展python进行混合编程的时候, C++中的例子常常是注册一个C++的类接口暴露给python进行继承,
我的问题是, 如何这个C++的实现类继承自一个python文件中已经定义的python类, 而不是单纯的C++定义实现的类?
--
FROM 124.126.0.*
python 没有类暴露给 c++,只有一个个的对象。比如 str 这个 type,在 c++ 看来,也不过是一个对象。
所以你想继承 python 类型,需要:
1. 在 python 里面定义工具函数:
def create_cpp_type(base_type, cpp_stub): pass
这个函数返回一个 python type 继承于 base_type,然后调用 cpp 提供的函数。
2. 在 cpp 里面实现一个普通的 PyObject,只是它的 self 是你创建的 python type.
【 在 poggy 的大作中提到: 】
: 在用C++扩展python进行混合编程的时候, C++中的例子常常是注册一个C++的类接口暴露给python进行继承,
: 我的问题是, 如何这个C++的实现类继承自一个python文件中已经定义的python类, 而不是单纯的C++定义实现的类?
--
FROM 124.72.110.*
【 在 hgoldfish 的大作中提到: 】
: python 没有类暴露给 c++,只有一个个的对象。比如 str 这个 type,在 c++ 看来,也不过是一个对象。
: 所以你想继承 python 类型,需要:
: 1. 在 python 里面定义工具函数:
: ...................
谢谢
还有一个疑问, 用C++生成的dll作为python模块,
这个dll的文件名和import的模块名是如何关联的?
有的pyd命名是类似 XXXX.cp37-win_amd64.pyd的, 有些是XXXX.pyd,
这个是需要放到sys.path 路径中对吧, 另外, 网上有的是还要用pip之类的包管理工具安装,
我的理解, 安装也不过是把这个包或模块放入site-packages 或者到这个目录下做个软链接,那
本质也是放入了查找路径
--
FROM 124.126.0.*
XXXX.cp37-win_amd64.pyd 和 XXXX.pyd 都可以。
两个文件都存在时,import前者。
第一种命名方式是指定python版本了,此例中是python 3.7.x都能用,其它版本的python会无视这个文件。
C++生成的dll大多是要指定python版本的。
将文件路径加到sys.path里就可以 import XXXX 了。
【 在 poggy 的大作中提到: 】
: 谢谢
: 还有一个疑问, 用C++生成的dll作为python模块,
: 这个dll的文件名和import的模块名是如何关联的?
: ...................
--
FROM 183.192.17.*