[英]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
的对象属于两个类: str
和Enum
。 所以没有必要引入基于整数的Enum class。它可以从一开始就是字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.