我想创建一个包含单个项目的各种属性的地图,并在多个模块之间共享。最明显的答案是使用字符串,但由于地图将用于多个模块,我不希望维护者必须知道所有现有属性。例如,如果两个模块想要与“颜色”相关联的东西,那么它们不应该通过不小心选择相同的名称来互相破坏。
我想到的一些不起作用的想法:
1)字符串,整数键:如上所述,这不容易扩展。
2)创建一个特定的类,使用id():例如,我认为它可以用来创建一个Key()类,但是对于从两个不同的地方导入的模块,这不起作用。例如,您可能希望将上面描述的“颜色”属性设置如下:
color = Key()
如果你这样做,这不起作用
#module命名为foo
bar = Key()
import foo
id(foo.bar) == id(bar)
3)查看堆栈跟踪以查看密钥的创建位置,并将其用作标识符的一部分。绝对不想使用行号,因为这太脆了。但是,在主模块的情况下,使用模块和项目名称会失败。例如:
在foo.py中:
key = Key() # will be named foo.py-key
其他地方,在bar.py:
import foo
foo.key # will be named /Users/person/foo.py-key
谢谢!任何建议都表示赞赏。
答案 0 :(得分:0)
使用字符串,但前缀为当前模块名称。然后你就不会发生任何碰撞。
key = __name__ + '.color'