python - 使用枚举时禁用 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
它本身。
解决方案
由于问题仍然存在,我们可以使用以下解决方法
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 错误
推荐阅读
- elasticsearch - 弹性搜索如何通过 doc id 查找文档内容
- java - 从 YourKit 调用 System.gc() 会导致分配的内存增加
- angular - 用玩笑测试@ngrx/Effect
- apache-spark - 如何使用 Spark-Redshift 连接器设置 wlm_query_slot_count
- java - Spring JPA 数据存储库通用实现示例
- scala - Apache Spark RDD + persist() + 惰性
- python - 计算熊猫数据框中连续正值的有效方法
- python - 将多列分类变量重塑和编码为一种热编码
- java - 在 IntelliJ 中应用格式化编码样式
- typo3 - 带有选择字段的 TCA 建议向导(并排)