gpt4 book ai didi

python - 规避模块名称修改的干净方法?

转载 作者:行者123 更新时间:2023-12-04 05:37:58 24 4
gpt4 key购买 nike

我正在使用 Python 的 ctypes 来连接一个 C 库文件,运行 ctypesgen创建一个我可以导入的包装模块(例如,api.py)。碰巧许多 C 函数和宏的名称都以双下划线开头,它们被 Python 视为“私有(private)”,并在用于类定义时调用名称修饰。

例如,这有效:

import api
api.__someGetter()

但这并不
import api
class MyClass(object):
i = api.__someGetter()

AttributeError: 'module' object has no attribute '_MyClass__someGetter'

这确实有效:
i = api.__dict__['__someGetter']()

但它对我来说似乎不是很优雅或容易阅读 - 代码将充满对字典键的调用。

有没有更好的方法来禁用或解决模块的名称修改?

(它是一个 C 库这一事实可能与答案无关,但希望它能解释为什么我不能只更改命名约定。)

最佳答案

您可以在 Python 中重新导出名称,将双下划线转换为单下划线。

import api
for name in api.__dict__:
if name.startswith('__'):
globals()[name[1:]] = api.__dict__[name]

这将更改 api 中的所有双下划线。到当前模块中的单个下划线。然后可以从另一个模块导入该模块。

注:不正确 在 C 中命名以下划线开头的函数。请参阅 n1526 的第 7.1.3 节“保留标识符”。在 C 中使用以双下划线开头的名称是“未定义的行为”,这是“不要这样做”的技术术语。

关于python - 规避模块名称修改的干净方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11680787/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com