我正在使用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'