我有一个非常简单的装饰器函数,用于通过模块的__all__
属性公开模块中定义的函数。因为我将它用于包中的多个模块,所以我在包的__init__.py
.
因为我不能__all__
在定义中使用,因为它会引用__all__
模块__init__.py
(或者更确切地说是包)的,我目前这样做是这样的:
def expose ( fn ):
fn.__globals__['__all__'].append( fn.__name__ )
这似乎工作得很好。但是我不确定使用该__global__
属性是否是理想的方法,特别是因为该属性似乎没有记录(至少我在文档中找不到任何关于它的信息)。
是否可以__globals__
正常使用,或者是否有更简单、更强大的方法来完成这项工作?
编辑:
为了澄清起见,我不一定需要访问__all__
模块的属性。我可以轻松地使用不同的名称并最终得到相同的问题。我之所以使用它,是__all__
因为它在模块中保存所有暴露对象的目的符合我的意图。但同时我也可以命名它exposedFunctions
或其他任何东西。所以问题更多的是关于如何访问模块的全局属性。