例:
class Planet(Enum):
MERCURY = (mass: 3.303e+23, radius: 2.4397e6)
def __init__(self, mass, radius):
self.mass = mass # in kilograms
self.radius = radius # in meters
参照:惑星
なぜこれをやりたいのでしょうか? コンストラクター リストにプリミティブ型 (int、bool) がいくつかある場合は、名前付き引数を使用すると便利です。
ベストアンサー1
列挙型で説明したように名前付き引数を使用することはできませんが、namedtuple
混入します:
from collections import namedtuple
from enum import Enum
Body = namedtuple("Body", ["mass", "radius"])
class Planet(Body, Enum):
MERCURY = Body(mass=3.303e+23, radius=2.4397e6)
VENUS = Body(mass=4.869e+24, radius=6.0518e6)
EARTH = Body(mass=5.976e+24, radius=3.3972e6)
# ... etc.
... メソッドを記述する必要がないので、よりクリーンな方法だと私は思います__init__
。
使用例:
>>> Planet.MERCURY
<Planet.MERCURY: Body(mass=3.303e+23, radius=2439700.0)>
>>> Planet.EARTH.mass
5.976e+24
>>> Planet.VENUS.radius
6051800.0
なお、ドキュメント「ミックスイン型は、Enum
塩基配列の中で自分自身の前に出現する必要があります」。