【问题标题】:Emulating namespaces in Python在 Python 中模拟命名空间
【发布时间】:2017-01-08 17:53:57
【问题描述】:

我知道 Python 有它所谓的“命名空间”,但我希望按照 security.crypto.hash.md5("b") 之类的行编写一些代码。 JavaScript 没有命名空间,但可以使用对象表示法复制它们的行为:

var stdlib = {
    math: {
        constants: {
            e: 2.718281828,
            pi: 3.141596535,
            silver: 2.414213562
        },
        operations: {
            add: function(a, b) {
                return a + b;
            },
            subtract: function(a, b) {
                return a - b;
            },
            multiply: function(a, b) {
                return a * b;
            },
            divide: function(a, b) {
                return a / b;
            }
        },
        abs: function(a) {
            if (a < 0) {
                return 0 - a;
            } else {
                return a;
            }
        },
        sgn: function(a) {
            if (a > 0) {
                return 1;
            } else if (a < 0) {
                return -1;
            } else {
                return 0;
            }
        }
    }
}

这允许编写如下代码:

var i = 0;
var j = 1;
var n = stdlib.math.operations.add(i, j);
var constants = Object.create(stdlib.math.constants);
var ops = Object.create(stdlib.math.operations);
var z = ops.multiply(n, constants.e);

在 Python 中,模块通过将它们放置在文件夹中而被分隔成命名空间,因此 osos.path 分别代表 $ROOT/osand ``$ROOT/os/path。有没有办法避免这种情况并做一些模拟命名空间的事情,比如上面的 JavaScript 技巧?

【问题讨论】:

    标签: python namespaces


    【解决方案1】:

    如果您所追求的只是点符号,您总是可以创建类吗?见Is it a good idea to using class as a namespace in Python

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-26
      • 1970-01-01
      • 2021-07-18
      • 1970-01-01
      • 2019-09-19
      • 1970-01-01
      • 2012-01-15
      相关资源
      最近更新 更多