繁体   English   中英

Python 自动为打字机生成字符串名称的枚举

[英]Python Enum with auto generated string names for typer

我将python 3.8.10与 typer typer 0.7.0一起使用,并希望使用我在项目中定义的枚举作为输入参数。

我之前在 argparse 中使用了类似下面的内容,除了设置choices=list(ModelTypeEnum) ,它工作正常 - 请注意,这是一个简短的示例,我有更多的值,在某些地方需要分配数值。

class ModelTypeEnum(Enum):
    ALEXNET = 0
    RESNET50 = 1
    VGG19 = 2

    def __str__(self):
        return self.name

然而,在 typer 中使用这样的东西期望参数是 integer

app = typer.Typer()

@app.command()
def main(model_type: ModelTypeEnum = typer.Argument(..., help="Model to choose")):
    ...
    return 0
click.exceptions.BadParameter: 'RESNET50' is not one of 0, 1, 2.

虽然这个例子很短并且可以转换为(str, Enum)我想要一个解决方案,我不需要手动指定字符串名称并且仍然有与每个项目关联的整数 - 这可能吗?

您为什么不使用类似于此问题中的方法: String-based enum in Python

class ModelTypeEnum(str, Enum):
    ALEXNET = 'ALEXNET'
    RESNET50 = 'RESNET50'
    VGG19 = 'VGG19'

您不需要实现__str__方法,因为ModelTypeEnum的对象属于两个类: strEnum 所以没有必要引入基于整数的Enum class。它可以从一开始就是字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM