在枚举中定义一个类常量是否可行?
在枚举中定义一个类常量是否可行?
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
内部定义一个类常量,或者有一些解决方法可以达到相同的效果?