我注意到Python 3枚举(link)中有一个奇怪之处

这是虫子吗?是故意的吗

以下是显示问题的示例代码:

class Color(Enum):
    Red = lambda: print('In Red')
    Blue = lambda: print('In Blue')

print(Color.Red)    # <function> - should be Color.Red via Docs
print(Color.Blue)   # <function> - should be Color.Bluevia Docs
print(Color['Red']) # throws KeyError - should be Color.Red via Docs

此外,这是我第一次问,所以请告诉我,如果有什么我应该做的不同!谢谢你的帮助!

推荐答案

The documentation说:

允许的规则如下:_sunder_个名称(以单下划线开头和结尾)由enum保留,不能使用;枚举中定义的所有其他属性都将成为此枚举的成员,但__dunder__个名称和描述符(方法也是描述符)除外.

"方法"只是在类体内定义的函数.不管你用lambda还是def来定义它.所以你的例子和下面一样:

class Color(Enum):
    def Red():
        print('In Red')
    def Blue():
        print('In Blue')

换句话说,您声称的枚举值实际上是方法,因此不会成为枚举的成员.

Python-3.x相关问答推荐

类型注释:pathlib. Path vs importlib. resources. abc. Traversable

如何从包含SPAN文本的标记中获取链接

Select 作为 MultiIndex 一部分的两个 DatetimeIndex 之间的行

我可以设置树视图层次 struct 按钮吗?

Python根据条件从多行读取值

基于组/ID从原始数据框中创建两个子数据框

三重奏:为什么频道被记录为使用async with,而不是with?

在python中将字符串写入文本文件

Pandas 值列中列表中元素的计数

从 Python2 到 Python3 的这种解包行为的变化是什么?

Generic[T] 基类 - 如何从实例中获取 T 的类型?

为什么包含类的名称不被识别为返回值函数注释?

Python过滤器函数 - 单个结果

如何在元素列表中找到最大的数字,可能是非唯一的?

Tensorflow:ImportError:libcudnn.so.7:无法打开共享对象文件:没有这样的文件或目录

TypeError:列表索引必须是整数或切片,而不是列表

Python 3 - Zip 是 pandas 数据框中的迭代器

具有不均匀间隙的 Python 范围

如何为 anaconda python3 安装 gi 模块?

Pylint 中的模块PyQt5.QtWidgets错误中没有名称QApplication