ホームページ  >  記事  >  バックエンド開発  >  Python で列挙を実装する方法

Python で列挙を実装する方法

WBOY
WBOY転載
2023-05-11 16:28:141221ブラウズ

通常のクラスを使用して列挙型を直接実装する

Python では、列挙型はオブジェクトで定義するクラス変数と同じです。各クラス変数は列挙型項目です。アクセス列挙項目は、次のようなクラス名とクラス変数です:

class color():
    YELLOW  = 1
    RED     = 2
    GREEN   = 3
    PINK    = 4
 
# 访问枚举项
print(color.YELLOW) # 1

これで問題は解決できますが、厳密ではなく、あまり安全ではありません:

1.列挙クラスでは、同じキーを持つ列挙項目 (クラス変数) があってはなりません。

2. クラスの外で直接列挙項目の値を変更することはできません。

class color():
    YELLOW  = 1
    YELLOW  = 3   # 注意这里又将YELLOW赋值为3,会覆盖前面的1
    RED     = 2
    GREEN   = 3
    PINK    = 4
 
# 访问枚举项
print(color.YELLOW) # 3
 
# 但是可以在外部修改定义的枚举项的值,这是不应该发生的
color.YELLOW = 99
print(color.YELLOW) # 99

解決策: enum モジュールを使用する

enum モジュールはシステムの組み込みモジュールであり、import を使用して直接インポートできます。ただし、インポートする場合、import を使用することはお勧めできません。 enum を使用して enum モジュール内のすべてのデータを転送します。インポート、一般に最も一般的に使用されるのは Enum、IntEnum、および enum モジュール内で一意の

# 导入枚举类
from enum import Enum
 
# 继承枚举类
class color(Enum):
    YELLOW  = 1
    BEOWN   = 1 
    # 注意BROWN的值和YELLOW的值相同,这是允许的,此时的BROWN相当于YELLOW的别名
    RED     = 2
    GREEN   = 3
    PINK    = 4
 
class color2(Enum):
    YELLOW  = 1
    RED     = 2
    GREEN   = 3
    PINK    = 4

独自に定義された列挙クラスを使用します:

print(color.YELLOW) # color.YELLOW
print(type(color.YELLOW)) # <enum &#39;color&#39;>
 
print(color.YELLOW.value)  # 1
print(type(color.YELLOW.value)) # <class &#39;int&#39;>
 
print(color.YELLOW == 1)    # False
print(color.YELLOW.value == 1)  # True
print(color.YELLOW == color.YELLOW)  # True
print(color.YELLOW == color2.YELLOW)  # False
print(color.YELLOW is color2.YELLOW)  # False
print(color.YELLOW is color.YELLOW)  # True
 
print(color(1))         # color.YELLOW
print(type(color(1)))   # <enum &#39;color&#39;>
  注意事项如下:

1. 列挙型クラスは使用できません オブジェクトをインスタンス化します

2. 列挙型クラスの項目にアクセスするには、直接アクセスするクラス名とアクセスする項目 (color.YELLOW## など) を使用するだけです。

#3. 列挙型クラス内部で定義された Key = Value はクラス外で変更できないため、次のアプローチは間違っています

color.YELLOW = 2  # Wrong, can&#39;t reassign member

4. 列挙型項目は == を使用して比較に使用できます。または、

5. Enum をインポートした後、列挙クラスの Key と Value を同じにすることはできません。値は同じにすることができますが、同じ値を持つキーはエイリアスとして使用されます。

6. クラスを列挙したい場合、値の値は整数値のみにすることができ、IntEnum をインポートしてから IntEnum を継承できます。このとき、値が文字列数値の場合、エラーは発生しないことに注意してください。レポートされる:

from enum import IntEnum

7. 列挙クラスのキーが同じであることができない場合、Enum をインポートするときに、一意の関数

from enum import Enum, unique
をインポートする必要があります。

以上がPython で列挙を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。