在Python中模拟命名空间

时间:2016-09-01 01:43:49

标签: python namespaces

我知道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 / os and ``$ROOT/os/path。有没有办法避免这种情况,并做一些模仿名称空间的东西,如上面的JavaScript技巧?

1 个答案:

答案 0 :(得分:1)

如果你之后只是点符号,你总是可以创建类吗?请参阅Is it a good idea to using class as a namespace in Python