通常のクラスを使用して列挙型を直接実装する
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 'color'> print(color.YELLOW.value) # 1 print(type(color.YELLOW.value)) # <class 'int'> 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 'color'> 注意事项如下:
1. 列挙型クラスは使用できません オブジェクトをインスタンス化します
2. 列挙型クラスの項目にアクセスするには、直接アクセスするクラス名とアクセスする項目 (color.YELLOW## など) を使用するだけです。
#3. 列挙型クラス内部で定義された Key = Value はクラス外で変更できないため、次のアプローチは間違っていますcolor.YELLOW = 2 # Wrong, can't reassign member4. 列挙型項目は == を使用して比較に使用できます。または、
5. Enum をインポートした後、列挙クラスの Key と Value を同じにすることはできません。値は同じにすることができますが、同じ値を持つキーはエイリアスとして使用されます。 6. クラスを列挙したい場合、値の値は整数値のみにすることができ、IntEnum をインポートしてから IntEnum を継承できます。このとき、値が文字列数値の場合、エラーは発生しないことに注意してください。レポートされる:
from enum import IntEnum7. 列挙クラスのキーが同じであることができない場合、Enum をインポートするときに、一意の関数
from enum import Enum, uniqueをインポートする必要があります。
以上がPython で列挙を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。