首页 > 解决方案 > 在 Enum 类型上使用元类,并让 Pylint 满意

问题描述

我有以下Enum子类;该类本身是必需的,因此__str__返回值的字符串表示形式(不是完全限定的名称),并且元类在那里确保我使用的是唯一值。

from enum import Enum


class StringifiedEnumMeta(type(Enum)):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        assert len(set(self.__members__.keys())) == len(set(self.__members__.values()))


class StringifiedEnum(Enum, metaclass=StringifiedEnumMeta):
    def __str__(self):
        return str(self.value)

似乎按预期工作;例如,以下代码失败并显示AssertionError

class MyEnum(StringifiedEnum):
    KEY1 = 'value'
    KEY2 = 'value'

但是,PyLint 报告我正在使用无效的元类:

mwe.py:8:0: E1139: Invalid metaclass 'StringifiedEnumMeta' used (invalid-metaclass)

这真的是一个无效的元类,还是 PyLint 在这里搞错了?

标签: pythonenumspylint

解决方案


推荐阅读