在枚举中定义一个类常量是否可行?

11 浏览
0 Comments

在枚举中定义一个类常量是否可行?

Python 3.4引入了一个新模块enum,为语言添加了一个枚举类型。 enum.Enum的文档提供了一个示例来演示如何扩展它:

>>> class Planet(Enum):
...     MERCURY = (3.303e+23, 2.4397e6)
...     VENUS   = (4.869e+24, 6.0518e6)
...     EARTH   = (5.976e+24, 6.37814e6)
...     MARS    = (6.421e+23, 3.3972e6)
...     JUPITER = (1.9e+27,   7.1492e7)
...     SATURN  = (5.688e+26, 6.0268e7)
...     URANUS  = (8.686e+25, 2.5559e7)
...     NEPTUNE = (1.024e+26, 2.4746e7)
...     def __init__(self, mass, radius):
...         self.mass = mass       # 千克
...         self.radius = radius   # 米
...     @property
...     def surface_gravity(self):
...         # 万有引力常数  (m3 kg-1 s-2)
...         G = 6.67300E-11
...         return G * self.mass / (self.radius * self.radius)
...
>>> Planet.EARTH.value
(5.976e+24, 6378140.0)
>>> Planet.EARTH.surface_gravity
9.802652743337129

这个示例还展示了Enum的一个问题:在surface_gravity()属性方法中,定义了一个常量G,通常应该在类级别定义 - 但是,在Enum内部进行这样的定义只会将其添加为枚举的一个成员,因此它被定义在方法内部。

如果该类想要在其他方法中使用这个常量,它也必须在那里定义,这显然并不理想。

是否有任何方法可以在Enum内部定义一个类常量,或者有一些解决方法可以达到相同的效果?

0