首页 > 解决方案 > 使用枚举时禁用 pylint 警告 E1101

问题描述

我最近看到了 Anthony Fox 的这篇文章,它展示了如何使用枚举在 django CharFields 中创建选择集,我认为它非常简洁。

基本上,您创建了 Enum 的子类:

from enum import Enum

class ChoiceEnum(Enum):
    @classmethod
    def choices(cls):
        return tuple((x.name, x.value) for x in cls)

然后可以在您的模型中使用,如下所示:

from .utils import ChoiceEnum

class Car(models.Model):
    class Colors(ChoiceEnum):
        RED = 'red'
        WHITE = 'white'
        BLUE = 'blue'

    color = models.CharField(max_length=5, choices=Colors.choices(), default=Colors.RED.value)

red_cars = Car.objects.filter(color=Car.Colors.RED.value)

但是,每当您尝试访问枚举值 ( Colors.RED.value)时,pylint 都会引发警告

E1101:Instance of 'str' has no 'value' member

有没有办法避免/禁用 ChoiceEnum 的每个实例的此警告?

这个答案只适用于 的子类ChoiceEnum,而不是ChoiceEnum它本身。

标签: pythondjangoenumspylint

解决方案


由于问题仍然存在,我们可以使用以下解决方法

from .utils import ChoiceEnum

class Car(models.Model):
    class Colors(ChoiceEnum, Enum):
        RED = 'red'
        WHITE = 'white'
        BLUE = 'blue'

    color = models.CharField(max_length=5, choices=Colors.choices(), default=Colors.RED.value)

这现在不会产生 pylint 错误


推荐阅读