Modul: 像 CommonJS 那样控制模块的导出成员

2022-05-19 09:59:09 +08:00
 frostming

昨天突然有的想法,然后试验可行以后就立即做出来了。这个库不仅仅控制 __all__ 变量,而且严格控制导出的成员,未导出的成员则获取不到。

例子:

# mymodule.py
from modul import exports


@exports
def foo():
    return 42


baz = "unexported"
bar = "hello"

exports.bar = bar

调用:

>>> import mymodule
>>> mymodule.foo()
42
>>> mymodule.bar
"hello"
>>> mymodule.baz
AttributeError: Module 'test' has no attribute 'baz'
>>> mymodule.__all__
['foo', 'bar']

除此之外还支持所有 dict API 以及 modul.exports = ... 整体赋值。

作为一个玩具项目,也不知会不会有什么用。

项目地址: https://github.com/frostming/modul

1863 次点击
所在节点    Python
3 条回复
jaredyam
2022-05-19 10:59:51 +08:00
效率真高。大佬如何理解包级暴露、模块级暴露、对象级暴露的差异?
frostming
2022-05-19 11:18:39 +08:00
@jaredyam 前两个本质是一个东西,包暴露就是<package>/__init__模块的暴露

对象暴露的话我这个没有覆盖到。
abersheeran
2022-05-19 12:34:57 +08:00
感觉没有什么实际使用的场景,不过挺有意思的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/853857

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX