栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python中的枚举枚举?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python中的枚举枚举?

您无法使用

enum
stdlib模块执行此操作。如果您尝试:

class A(Enum):    class B(Enum):        a = 1        b = 2    class C(Enum):        c = 1        d = 2A.B.a

…您将得到一个类似的异常:

AttributeError: 'A' object has no attribute 'a'

这是因为的枚举值的

A
行为类似于的实例
A
,而不是其值类型的实例。就像持有
int
值的普通枚举在值上没有
int
方法一样,
B
不会有
Enum
方法。比较:

class D(Enum):    a = 1    b = 2D.a.bit_length()

当然,您可以显式访问基础值(

int
B
类):

D.a.value.bit_length()A.B.value.a

…但是我怀疑那是您想要的。


所以,你可以用同样的伎俩,

IntEnum
用途,既继承的
Enum
,并
int
使得其枚举值
int
值,如所描述的其他的文档的部分?

不,因为您将继承哪种类型?不

Enum
; 那已经是你的类型了。您不能使用
type
(任意类的类型)。没有任何工作。

因此,您必须使用具有不同设计的其他Enum实现来完成此工作。幸运的是,PyPI和ActiveState上大约有69105个不同的选项可供选择。


例如,当我要构建类似于Swift枚举的东西(比Python / Java / etc。枚举更接近ML
ADT)时,有人建议我看一下

makeobj
。我忘记这样做了,但是现在我只是这样做了,并且:

class A(makeobj.Obj):    class B(makeobj.Obj):        a, b = makeobj.keys(2)    class C(makeobj.Obj):        c, d = makeobj.keys(2)print(A.B, A.B.b, A.B.b.name, A.B.b.value)

这给您:

<Object: B -> [a:0, b:1]> <Value: B.b = 1> b 1

如果查看它

__qualname__
而不是查看它
__name__
来创建str /
repr值,那可能会很好,但是否则看起来它就可以满足您的所有要求。而且它还有其他一些很酷的功能(不完全是我想要的,但是很有趣……)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/662726.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号