Skip to main content

从 str 继承的枚举。

项目描述

字符串枚举

构建状态

StrEnum 是标准库enum.Enum中继承自str补充 的 Python。enum.IntEnum支持python 3.6+。

安装

可以使用pip来安装。

pip install StrEnum

用法

from enum import auto
from strenum import StrEnum


class HttpMethod(StrEnum):
    GET = auto()
    HEAD = auto()
    POST = auto()
    PUT = auto()
    DELETE = auto()
    CONNECT = auto()
    OPTIONS = auto()
    TRACE = auto()
    PATCH = auto()


assert HttpMethod.GET == "GET"

## You can use StrEnum values just like strings:

import urllib.request

req = urllib.request.Request('https://www.python.org/', method=HttpMethod.HEAD)
with urllib.request.urlopen(req) as response:
   html = response.read()

assert len(html) == 0 # HEAD requests do not (usually) include a body

有些类的auto()值将每个成员名称折叠为大写或小写:

from enum import auto
from strenum import LowercaseStrEnum, UppercaseStrEnum

class Tag(LowercaseStrEnum):
    Head = auto()
    Body = auto()
    Div = auto()

assert Tag.Head == "head"
assert Tag.Body == "body"
assert Tag.Div == "div"

class HttpMethod(UppercaseStrEnum):
    Get = auto()
    Head = auto()
    Post = auto()

assert HttpMethod.Get == "GET"
assert HttpMethod.Head == "HEAD"
assert HttpMethod.Post == "POST"

以及其auto()值将每个成员名称转换为 camelCase、PascalCase、kebab-case、snake_case 和 MACRO_CASE 的类:

from enum import auto
from strenum import CamelCaseStrEnum, PascalCaseStrEnum
from strenum import KebabCaseStrEnum, SnakeCaseStrEnum
from strenum import MacroCaseStrEnum

class CamelTestEnum(CamelCaseStrEnum):
    OneTwoThree = auto()


class PascalTestEnum(PascalCaseStrEnum):
    OneTwoThree = auto()


class KebabTestEnum(KebabCaseStrEnum):
    OneTwoThree = auto()


class SnakeTestEnum(SnakeCaseStrEnum):
    OneTwoThree = auto()

class SnakeTestEnum(MacroCaseStrEnum):
    OneTwoThree = auto()

assert CamelTestEnum.OneTwoThree == "oneTwoThree"
assert PascalTestEnum.OneTwoThree == "OneTwoThree"
assert KebabTestEnum.OneTwoThree == "one-two-three"
assert SnakeTestEnum.OneTwoThree == "one_two_three"
assert MacroCaseStrEnum.OneTwoThree == "ONE_TWO_THREE"

当然,与任何 Enum 一样,您可以手动分配值。

from strenum import StrEnum

class Shape(StrEnum):
    CIRCLE = "Circle"

assert Shape.CIRCLE == "Circle"

但是,对大小写更改类执行此操作不会操纵值——无论您分配什么都是它们最终得到的值。

from strenum import KebabCaseStrEnum

class Shape(KebabCaseStrEnum):
    CIRCLE = "Circle"

# This will raise an AssertionError because the value wasn't converted to
# kebab-case.

assert Shape.CIRCLE == "circle"

贡献

欢迎请求请求。对于重大更改,请先打开一个问题讨论您想要更改的内容。

在提交 PR 之前,请确保测试通过。这个存储库使用 BlackPylint来保持一致性。两者都作为测试套件的一部分自动运行。

运行测试

可以使用以下方式运行测试make

make test

这将创建一个虚拟环境,安装模块及其测试依赖项并运行测试。或者,您可以手动执行相同的操作:

python3 -m venv .venv
.venv/bin/pip install .[test]
.venv/bin/pytest

执照

麻省理工学院

NB 从 Python 3.11 开始,enum.StrEnum在标准库中可用。此实现不是标准库实现的直接替代品。具体来说,Python 开发人员已决定在使用时默认将名称折叠为小写auto(),我认为这违反了最小意外原则。

项目详情


下载文件

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

源分布

StrEnum-0.4.8.tar.gz (22.8 kB 查看哈希

已上传 source

内置分布

StrEnum-0.4.8-py3-none-any.whl (7.6 kB 查看哈希

已上传 py3