我想创建一个名称空间,其成员由IDE建议,就像它适用于模块变量一样。
This question是关于如何通过argparse.Namespace
创建命名空间。
但是我的IDE(PyCharm 2016.1.3)没有协助这样的命名空间。假设如下:
module1.py
from argparse import Namespace
namespace = Namespace(var=1)
module2.py
from .module1 import namespace
# No suggestion for `var` by the IDE.
namespace.var
即使我明确指定var
到namespace
我也没有得到建议:
# In module1.py
namespace.var = 1
dict主要建议有什么作用:
module1.py
namespace = dict(var=1)
module2.py
from .module1 import namespace
# Suggests dict key 'var'.
namespace['var']
但是我发现使用dict
作为命名空间会使代码显得不那么清晰。
当建议使用模块变量时,我可以使用命名空间名称namespace_var = 1
为每个变量添加前缀。然而,由于所有变量都存在于同一范围内,因此我不能简单地import
一个命名空间。命名也不清楚,哪个部分引用命名空间以及变量名称是什么。
另一种选择是使用class
:
module1.py
class namespace: var = 1
module2.py
from .module1 import namespace
# Suggests `var`.
namespace.var
但是,如果我希望我的命名空间是小写的,那么类定义就不符合PEP8命名约定(IDE会抱怨它)。因此,我对此解决方案也不满意。同样class Namespace: var = 1; namespace = Namespace
感觉太人为了。
您是否有使用其他IDE的经验,或者您是否知道如何创建由IDE(特别是PyCharm)辅助的命名空间?
答案 0 :(得分:0)
我最终为不同的命名空间使用单独的模块,并将这些模块分组到一个包中。
结构如下:
module1/
├── __init__.py
└── namespace.py
__初始化__。PY
import namespace
namespace.py
var = 1
像这样,import module1
可以使用module1.namespace.var
访问from module1 import namespace
或namespace.var
。可以使用module1
,因为它仍然是具有相似内容的模块。
其他命名空间可以作为单独的模块添加,并由import
__init__.py
提供。