【问题标题】:Create namespace whose members are suggested by the IDE创建 IDE 建议其成员的命名空间
【发布时间】:2017-05-27 22:24:28
【问题描述】:

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

argparse.命名空间

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']

但是我发现使用dicts 作为命名空间会使代码看起来不那么清晰。

带有名称前缀的模块变量

由于建议使用模块变量,我可以简单地为每个变量添加命名空间名称的前缀: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)辅助的命名空间?

【问题讨论】:

    标签: python namespaces pycharm


    【解决方案1】:

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

    结构如下:

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

    __init__.py

    import namespace
    

    namespace.py

    var = 1
    

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

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

    【讨论】:

      猜你喜欢
      • 2011-08-27
      • 1970-01-01
      • 1970-01-01
      • 2013-07-07
      • 2021-10-06
      • 1970-01-01
      • 1970-01-01
      • 2016-07-15
      • 2012-10-14
      相关资源
      最近更新 更多