gpt4 book ai didi

python - 如何在模块中定义与 __all__ 分开的 `from ... import *' api?

转载 作者:太空狗 更新时间:2023-10-30 00:41:46 25 4
gpt4 key购买 nike

我有一个模块,大致分为实用类型函数和核心 api 函数。我需要将它们全部放在 __all__ 中,以便 help() 有用,并指定模块中的许多函数/类/等中的哪些是供外部使用,但我也想支持 from mymodule import * 作为将核心功能引入其他模块的一种方式。有办法吗?

最佳答案

差不多。虽然您不能让 __all__ 以这种方式执行双重任务,但您可以添加自己的虚拟 api 模块,然后可以将其导入...

class fake_module(object):
def __init__(self, name, *args):
self.name = name
self.__all__ = []
all_objects = globals()
for name in args:
self.__dict__[name] = all_objects[name]
self.__all__.append(name)
def register(self):
sys.modules["%s.%s" % (__name__, self.name)] = self

fake_module('api', 'class1', 'class2', 'func3', 'exception4').register()

然后在其他模块而不是 from mymodule import * 中,您可以执行 from mymodule.api import * 以获得所需的子集,同时仍然将所有内容保持在一个单一的模块。

注意:from ... import * 通常不是好的做法,应该非常小心地使用,并且只能与明确声明它们具有的模块/包一起使用在设计时就考虑到了这种用法。

关于python - 如何在模块中定义与 __all__ 分开的 `from ... import *' api?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7068340/

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