我在Python中定义了以下枚举:
class Unit(Enum):
GRAM = ("g")
KILOGRAM = ("kg", GRAM, 1000.0)
def __init__(self, symbol, base_unit = None, multiplier = 1.0):
self.symbol = symbol
self.multiplier = multiplier
self.base_unit = self if base_unit is None else base_unit
我希望如此
print(Unit.GRAM.base_unit)
print(Unit.KILOGRAM.base_unit)
会回来的
Unit.GRAM
Unit.GRAM
然而,我得到的是相当混乱
Unit.GRAM
g
为什么会这样?你知道吗
Python定义类的方式包括创建一个新的作用域,处理一堆语句(变量赋值、函数定义等),然后根据所有这些语句运行后存在的局部变量实际创建一个class对象。在最后一步之前,没有任何东西会转换成
Enum
实例。你知道吗你可以这样理解:
从这个角度来看,希望您可以知道在定义
KILOGRAM
时,GRAM
实际上只是一个字符串。直到最后一个阶段,它才变成Unit
实例,在那里我调用(想象的)make_class()
函数1尽管我上面使用的
make_class
函数实际上并不存在于该名称下,但它与Python真正做的没有太大区别,Python调用type
的构造函数或元类(在本例中是Enum
的元类)。你知道吗达维兹很好地解释了这个问题。你知道吗
解决此问题所需的最后一点是:当运行每个成员的
__init__
时,已经创建了Enum
,因此可以调用它:相关问题 更多 >
编程相关推荐