Kurzusok
/
Python
Python
/
Tanterv
/
Felsorolások
Fe

Felsorolások ebben a kurzusban: Python

1 feladat

A(z) Felsorolások fogalomról

A Pythonban az enum egyedi nevek halmaza, amelyek egyedi, állandó értékekhez vannak kötve. Az Enums definiálása egy Enum osztályból való örökléssel történik. A beépített enumtípusok az enum modulban érhetők el, az Enum osztály pedig a from enum import Enum utasítással importálható.

from enum import Enum

class Color(Enum):
    RED = 1
    GREEN = 2

Figyeld meg, hogy az enum tagok értékei bármilyen adattípusúak lehetnek, például str, tuple, float és így tovább.

class Color(Enum):
    RED = 'red'
    GREEN = 'green'

Az Enums függvényhívás szintaxissal is létrehozhatók.

from enum import Enum

Animal = Enum('Animal', 'ANT BEE CAT DOG')
list(Animal)
#=> [<Animal.ANT: 1>, <Animal.BEE: 2>, <Animal.CAT: 3>, <Animal.DOG: 4>]

Animal.ANT.value
#=> 1

Ha egy enum két tagjának ugyanazt az értéket adod, a később definiált tag a korábbi álneve lesz. Egy enum két különböző tagja nem kaphatja ugyanazt a nevet.

class Color(Enum):
    RED = 1
    GREEN = 2
    ALIAS_OF_RED = 1

Color.ALIAS_OF_RED
#=> <Color.RED: 1>

Az enum tagjain a szokásos for member in szintaxissal lehet végigmenni:

for member in Color:
    print((member.name, member.value))
#=> (RED, 1)
#=> (GREEN, 2)

# __members__.items() helps you to loop through alias as well
for member in Color.__members__.items():
    print(member)
#=> ('RED', <Color.RED: 1>)
#=> ('GREEN', <Color.GREEN: 2>)
#=> ('ALIAS_OF_RED', <Color.RED: 1>)

Az Enum tagjai összehasonlíthatók az is (identitásoperátor) vagy az is not használatával. A == és a != (egyenlőségoperátorok) ugyanígy működik:

a = Color.RED

a is Color.RED
#=> True

a == Color.RED
#=> True

Egész számok értékként való hozzárendeléséhez az auto() függvény 1-től indul, és automatikusan állítja be a további értékeket.

class Shape(Enum):
    CIRCLE = auto()
    SQUARE = auto()
    OVAL = auto()

Az álnevek tiltásához (az azonos értékek különböző névvel való megjelenésének megakadályozásához) az osztálydekorátor @enum.unique dekorátor használható.

@enum.unique
class Shape(Enum):
    CIRCLE = 1
    SQUARE = 2
    TRIANGLE = 1
#=> ValueError: duplicate values found in <enum 'Shape'>: TRIANGLE -> CIRCLE

Egy adott értékhez tartozó enum tag eléréséhez ezt a jelölést használhatod: <EnumName>(<value>).

g = Color(2)

g is Color.GREEN
#=> True

g
#=> <Color.GREEN: 2>

Egy egyedi, korlátozott Enum úgy hozható létre, hogy az Enum osztályt bármilyen mix-in vagy adattípussal leszármaztatod. Például:

class StrEnum(str, Enum):
    pass

Az Enum leszármaztatása csak akkor megengedett, ha az enum nem definiál egyetlen tagot sem. További részletekért és magyarázatokért lásd az enum útmutatót és az enum szakácskönyvet.

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg