从str或bytes继承的enum的优雅实现
AnyStrEnum的Python项目详细描述
任何强度
从str或bytes继承的枚举的优雅实现
就这么简单
fromanystrenumimportStrEnumclassSeason(StrEnum):spring:strsummer:strautumn:strwinter:strprint(Season.summer)print(isinstance(Season.summer,str))# summer# True
功能
- 使用类型提示轻松分配成员(不需要使用auto()或其他存根)
- 支持自定义转换器或分隔符的自动值生成
- 方法来筛选成员(contains、contained_in、startswith、endswith等)
- 自定义str和bytes类型支持
安装
$ pip install AnyStrEnum
示例
使用自定义单词分隔符
若要自动将名称中的所有下划线(_)替换为更合适的值,请使用sep参数:
fromanystrenumimportStrEnumclassRegion(StrEnum,sep='-'):us_east_1:strus_west_1:strca_central_1:strcn_northwest_1:streu_central_1:streu_west_1:streu_north_2:strsa_east_1:strprint(Region.us_east_1)# us-east-1
使用str转换器和自定义单词分隔符
如果需要对名称应用更多更改,可以使用converter参数。在此处传递一个将对每个成员调用的函数
fromanystrenumimportStrEnumclassContentType(StrEnum,converter=lambdas:s.replace('_','/',1),sep='-'):application_json:strapplication_octet_stream:strapplication_x_json_stream:straudio_mpeg:straudio_pcm:straudio_ogg:strprint(ContentType.application_octet_stream)# application/octet-stream
从一个例子中可以看到,首先,名称将使用lambda函数进行转换,然后, 其余下划线将替换为给定的分隔符