【发布时间】:2015-06-29 19:02:52
【问题描述】:
这主要是一个“好的python风格”的问题。
我有一个模块,它使用了一些感觉应该分组的常量。
假设我们有狗和猫,他们每个人都有许多腿和最喜欢的食物。
注意
- 我们只想建模关于 Dogs 和 Cats 的常量
- 很可能我们将来会有更多的动物。
- 这些常量不会在当前模块之外使用。
我想到了以下解决方案:
模块级别的常量
DOG_NUMBER_OF_LEGS = 4
DOG_FAVOURITE_FOOD = ["Socks", "Meat"]
CAT_NUMBER_OF_LEGS = 4
CAT_FAVOURITE_FOOD = ["Lasagna", "Fish"]
它们似乎没有真正分组,但我认为这是我更喜欢的解决方案。
作为命名空间的类
class Dog(object):
NUMBER_OF_LEGS = 4
DOG_FAVOURITE_FOOD = ["Socks", "Meat"]
class Cat(object):
NUMBER_OF_LEGS = 4
FAVOURITE_FOOD = ["Lasagna", "Fish"]
我不喜欢这种解决方案,因为我们将拥有我们不会使用的类,并且它们可以实际实例化。
常量字典
ANIMALS_CONFIG = {
"DOG" : {
"NUMBER_OF_LEGS" : 4,
"FAVOURITE_FOOD" : ["Socks", "Meat"]
},
"CAT" : {
"NUMBER_OF_LEGS" : 4,
"FAVOURITE_FOOD" : ["Lasagna", "Fish"]
}
}
我也想过添加子模块,但我真的不想暴露那些内部常量
最pythonic的方法是什么/你会怎么做?
【问题讨论】:
-
你也可以有一个类
Animal和dog和cat该类的实例。 -
或者你也可以使用named tuples。
-
你将如何在你的代码中使用它们?你会迭代还是选择?选择参数从哪里来?
-
没有迭代或类似的东西。只是用全名称呼我的常数。 DOG_NUMBER_OF_LEGS 、 ANIMALS_CONFIG["DOG"]["NUMBER_OF_LEGS"] 或 Dog.NUMBER_OF_LEGS
-
@MarioA.CorcheroJiménez 只是为了确认一下,您希望对象的唯一行为是保存这两个值并通过键和/或属性访问它们?跨度>
标签: python python-2.7 namespaces coding-style constants