Python 列挙型で名前付き引数を使用できますか? 質問する

Python 列挙型で名前付き引数を使用できますか? 質問する

例:

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塩基配列の中で自分自身の前に出現する必要があります」。

おすすめ記事