我知道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中,模块通过将它们放在文件夹中而分成命名空间,因此os
和os.path
分别代表$ ROOT / os and ``$ROOT/os/path
。有没有办法避免这种情况,并做一些模仿名称空间的东西,如上面的JavaScript技巧?
答案 0 :(得分:1)
如果你之后只是点符号,你总是可以创建类吗?请参阅Is it a good idea to using class as a namespace in Python。