PyModule_New
从表面上看,C-API 函数PyModule_NewObject
显然创建了一个新的模块对象。
官方 Python 文档提供了以下解释PyModule_NewObject
:
返回一个name属性设置为 name 的新模块对象。只填写模块的doc和name属性;调用者负责提供文件属性。
PyModule_New
做同样的事情,除了它接受一个 C 字符串 ( char*
) 作为模块名称的参数,而不是一个PyObject*
字符串。
好的,这很简单,但是...
我的问题是:调用 API 函数有什么用PyModule_NewObject
?
当然,理论上这对于您想要动态创建新模块的情况来说会很棒。但问题是,实际上,在创建一个新的模块对象之后,对其有用的唯一方法是将对象(如方法、类、变量等)添加到模块的__dict__
属性中。这样,模块的用户可以导入它并实际使用它。
问题是__dict__
模块的属性是只读的:
>>> import re
>>> x = re
>>> re.__dict__ = { "foo" : "bar" }
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: readonly attribute
所以,在实践中,就我所见,动态创建的模块真的没有办法做任何有用的事情。那么,C API 函数的目的是PyModule_New
什么?