Czy możliwe jest zdefiniowanie stałej klasy wewnątrz Enum?
Python 3.4 wprowadza nowy modułenum
, co dodajetyp wyliczeniowy do języka. Dokumentacja dlaenum.Enum
zapewniaprzykład aby pokazać, jak można go rozszerzyć:
>>> 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 # in kilograms
... self.radius = radius # in meters
... @property
... def surface_gravity(self):
... # universal gravitational constant (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
Ten przykład pokazuje również problem zEnum
: wsurface_gravity()
metoda właściwości, stałaG
jest zdefiniowany, który normalnie byłby zdefiniowany na poziomie klasy - ale próba zrobienia tego wewnątrzEnum
po prostu dodałby go jako jeden z elementów enum, więc zamiast tego został zdefiniowany wewnątrz metody.
Gdyby klasa chciała użyć tej stałej w innych metodach, musiałaby być tam również zdefiniowana, co oczywiście nie jest idealne.
Czy istnieje sposób na zdefiniowanie stałej klasy wewnątrzEnum
lub jakieś obejście w celu osiągnięcia tego samego efektu?