Pydantic json 值在自定义枚举中为空



我正在使用Pydantic,我希望我的枚举也有docstring。

当我使用enum.Enum时,CookingModel工作正常。

import enum
from pydantic import BaseModel, ValidationError
class DocEnum(enum.Enum):
"""Enum with docstrings support"""
def __new__(cls, value, doc=None):
"""add docstring to the member of Enum if exists
Args:
value: Enum member value
doc: Enum member docstring, None if not exists
"""
obj = str.__new__(cls)
obj._value_ = value
if doc:
obj.__doc__ = doc
return obj

class FruitEnum(str, enum.Enum):
pear = 'pear'
banana = 'banana'
class CookingModel(BaseModel):
fruit: FruitEnum
a = CookingModel(fruit='banana')
a.json()

将返回:{"fruit": "banana"}

但是当我enum.Enum更改为DocEnum时(这样我就可以获得文档字符串(。

class FruitEnum(str, DocEnum):
pear = 'pear'
banana = 'banana'

它将返回:{"fruit": ""}

我该如何解决它?

传递value作为第二个参数来str.__new__解决问题。

import enum
from pydantic import BaseModel, ValidationError
class DocEnum(enum.Enum):
"""Enum with docstrings support"""
def __new__(cls, value, doc=None):
"""add docstring to the member of Enum if exists
Args:
value: Enum member value
doc: Enum member docstring, None if not exists
"""
obj = str.__new__(cls, value)
obj._value_ = value
if doc:
obj.__doc__ = doc
return obj

class FruitEnum(str, DocEnum):
pear = 'pear', 'it's pear docstring'
banana = 'banana'

最新更新