gpt4 book ai didi

Python 枚举 : How to get enum values with multiple attributes

转载 作者:行者123 更新时间:2023-12-05 09:02:23 27 4
gpt4 key购买 nike

我已经定义了两个带有属性的枚举。当我想通过指定其属性来访问枚举元素时,它适用于枚举 A (一个属性)但不适用于枚举 B (两个属性):

from enum import Enum

class A(Enum):
ValOne = ('One')
ValTwo = ('Two')

def __init__(self, num):
self.num = num

class B(Enum):
ValOne = ('Val', 'One')
ValTwo = ('Val', 'Two')

def __init__(self, val, num):
self.val = val
self.num = num

print(A('One'))
print(B('Val', 'One'))

我得到以下输出:

A.ValOne
Traceback (most recent call last):
File "test.py", line 19, in <module>
print(B('Val', 'One'))
File "/usr/lib/python3.8/enum.py", line 341, in __call__
return cls._create_(
File "/usr/lib/python3.8/enum.py", line 444, in _create_
_, first_enum = cls._get_mixins_(cls, bases)
File "/usr/lib/python3.8/enum.py", line 576, in _get_mixins_
raise TypeError("Cannot extend enumerations")
TypeError: Cannot extend enumerations

我在这里错过了什么?

最佳答案

更新

在 Python 3.12 中,按值查找的有效签名将是:

B(*values)

所以

B('Val', 'One')

将按预期工作并返回

<B.ValOne: ('Val', 'One')>

同时

B(('Val', 'One'))

将继续正常工作。


你错过的最重要的事情是 ('One') 不是一个 tuple——你需要一个逗号 (,),看起来像 ('One', )

因此 A 由单个非元组值 'One''Two' 组成。

但是,

B 是由元组组成的,但是

 B('Val', 'One')

没有将元组传递给B,它传递了两个参数:'Val''One'。正如@orlp 提到的,使用函数语法传递一个元组看起来像:

B(('Val', 'One'))

最后,在 AB 的成员定义中,不需要括号:

class A(Enum):
ValOne = 'One'
ValTwo = 'Two'

def __init__(self, num):
self.num = num


class B(Enum):
ValOne = 'Val', 'One'
ValTwo = 'Val', 'Two'

def __init__(self, val, num):
self.val = val
self.num = num

披露:我是 Python stdlib Enum 的作者, enum34 backport , 和 Advanced Enumeration (aenum)图书馆。

关于Python 枚举 : How to get enum values with multiple attributes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71569320/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com