创建其成员由IDE

时间:2017-01-12 17:32:21

标签: python namespaces pycharm

我想创建一个名称空间,其成员由IDE建议,就像它适用于模块变量一样。

argparse.Namespace

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

即使我明确指定varnamespace我也没有得到建议:

# 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)辅助的命名空间?

1 个答案:

答案 0 :(得分:0)

我最终为不同的命名空间使用单独的模块,并将这些模块分组到一个包中。

结构如下:

module1/
├── __init__.py
└── namespace.py

__初始化__。PY

import namespace

namespace.py

var = 1

像这样,import module1可以使用module1.namespace.var访问from module1 import namespacenamespace.var。可以使用module1,因为它仍然是具有相似内容的模块。

其他命名空间可以作为单独的模块添加,并由import __init__.py提供。