使用枚举时禁用pylint警告E1101

时间:2018-07-19 17:29:10

标签: python django enums pylint

我最近遇到了安东尼·福克斯(Anthony Fox)的this article,该视频演示了如何使用枚举在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实例避免/禁用此警告?

This answer仅适用于ChoiceEnum的子类,不适用于ChoiceEnum本身。

1 个答案:

答案 0 :(得分:0)

由于issue仍处于打开状态,我们可以使用以下解决方法

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错误