我正在使用 Python 的 ctypes 来连接 C 库文件,运行类型基因 http://code.google.com/p/ctypesgen/创建一个我可以导入的包装模块(例如 api.py)。许多 C 函数和宏的名称都以双下划线开头,Python 将其视为“私有”,并在类定义中使用时调用名称修饰。
例如,这有效:
import api
api.__someGetter()
但这并不
import api
class MyClass(object):
i = api.__someGetter()
AttributeError: 'module' object has no attribute '_MyClass__someGetter'
This does work:
i = api.__dict__['__someGetter']()
但对我来说,它似乎不太优雅或易于阅读 - 代码中将充斥着对字典键的调用。
有没有更好的方法来禁用或解决模块的名称修改?
(它是一个 C 库这一事实可能与答案无关,但希望它能解释为什么我不能只更改命名约定。)
您可以在 Python 中重新导出名称,将双下划线转换为单下划线。
import api
for name in api.__dict__:
if name.startswith('__'):
globals()[name[1:]] = api.__dict__[name]
这将更改中的所有双下划线api
到当前模块中的单下划线。然后可以从另一个模块导入该模块。
Note: It is 不正确在 C 中命名以两个下划线开头的函数。请参见 n1526 的第 7.1.3 节“保留标识符”。在 C 中使用以双下划线开头的名称是“未定义行为”,这是“不要这样做”的技术术语。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)