跳转到主要内容

优雅地创建具有自我命名的枚举

项目描述

Enumify

快速编写文档化的枚举,或具有成员值的枚举

安装

pip install enumify

什么是Enumify?

Enumify是基于如何让我在声明枚举时变得尽可能懒惰的想法构建的,坦白说!

我不喜欢如果只想将成员作为1:1,则需要重新输入成员名称的想法,如下所示

import enum

class DaysOfWeek(enum.Enum):
    MONDAY = "monday"
    TUESDAY = "tuesday"
    WEDNESDAY = "wednesday"

当然,有一个名为fastcore的替代方案,特别是mk_class,它可以像以下那样注解

from fastcore.basics import mk_class
mk_class("DaysOfWeek", {o:o.lower() for o in ["MONDAY", "TUESDAY", "WEDNESDAY"]})

但是我不喜欢DaysOfWeek类是渗透的,因为它不是一个真正的Enum,我还有一个目标就是让枚举成员也被文档化

因此,这是我们之前枚举的最终转换

from enumify import enumify, Member

@enumify
class DaysOfWeek:
    MONDAY:Member
    TUESDAY:Member
    WEDNESDAY:Member

我们可以看到其设置值如下

print(DaysOfWeek.MONDAY)
monday

因此,我们来到了enumify的两个用例

  • 创建成员值是成员名称的枚举
  • 创建可以被文档化的枚举

我如何使用它?

支持两种“模式”的 enumify,一种是交互模式,另一种是静态模式。当您处于VSCode或PyLint等环境中时,应使用静态模式,因为这些工具可以利用特定变量或成员下的文档。

如果您正在为枚举开发或使用Jupyter Notebook,则应使用交互模式。

这是什么意思?让我们比较两个示例。

交互模式

在交互模式下,我们不仅可以使用 MemberMem 注释来指定我们命名的成员,还可以通过分配来对该成员进行文档说明。

@enumify(interactive=True)
class DaysOfWeek:
    MONDAY:Member = "The first day of the week"
    TUESDAY:Member = "The second day of the week"
    WEDNESDAY:Member = "The third day of the week"

现在这些成员将具有关联的文档

DaysOfWeek.MONDAY.__doc__
'The first day of the week'

我们甚至可以通过在分配中最后指定它的文档来对非 Member 类型的值进行文档说明

@enumify(interactive=True)
class DaysOfWeek:
    MONDAY:Member = "The first day of the week"
    TUESDAY:int = 0, "Some number"
DaysOfWeek.TUESDAY.__doc__
'Some number'

但是,当使用VSCode等IDE时,它们将不会显示这些文档。这就是静态模式的作用所在。

静态模式

在静态模式下,我们仍然可以使用 Member 注释,但假设用户将在IDE中工作,因此我们依赖IDE如何注释变量。以下是我们使用此方法的完整 DaysOfWeek 示例

@enumify(interactive=False)
class DaysOfWeek:
    MONDAY:Member
    "The first day of the week"
    TUESDAY:Member
    "The second day of the week"
    WEDNESDAY:Member
    "The third day of the week"
DaysOfWeek.MONDAY
<DaysOfWeek.MONDAY: 'monday'>
assert DaysOfWeek.MONDAY.__doc__ is None

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分布

enumify-0.0.1.tar.gz (12.0 kB 查看哈希值)

上传时间 源代码

构建分布

enumify-0.0.1-py3-none-any.whl (10.3 kB 查看哈希值)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面