我想知道 enum 和 namedtuple 之间有什么区别,什么时候应该使用其中一个。
最佳答案
作为一个类比(尽管不完美),您可以将 python 中的 enum.Enum
和 namedtuple
视为 enum
和 struct
在 C 中。换句话说,enum
是一种别名值的方式,而 namedtuple
是一种按名称封装数据的方式。两者并不能真正互换,您可以使用 enum
s 作为 namedtuple
中的命名值。
我认为这个例子说明了差异。
from collections import namedtuple
from enum import Enum
class HairColor(Enum):
blonde = 1
brown = 2
black = 3
red = 4
Person = namedtuple('Person', ['name','age','hair_color'])
bert = Person('Bert', 5, HairColor.black)
您可以像访问常规对象一样访问该人的命名“属性”。
>>> print(bert.name)
Bert
>>> print(bert.age)
5
>>> print(bert.hair_color)
HairColor.black
>>> print(bert.hair_color.value)
3
您通常不会看到像这样的 namedtuple
,因为同样的基本概念可以通过使用更广为人知的 class
声明来实现。下面的 class
定义与上面的 namedtuple
定义几乎相同。
class Person:
def __init__(self, name, age, hair_color):
self.name = name
self.age = age
self.hair_color = hair_color
然而,namedtuple
和 class
对象之间的主要区别在于 namedtuple
的属性在创建后不能更改。
关于python - 枚举和命名元组有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40632750/