BOO大全/列举
< BOO大全
列举
编辑有时候我们会需要一组常数来描述状态。举例来说,电视可能是关着的、开着的或者是在休眠状态。当然,你知道更好的方法是使用常数来取代 Magic number。
class TvState:
static final Off = 0
static final On = 1
static final Standby = 2
这是个好方法,只是要打太多字了。列举(Enumeration的缩写:Enum)会是个更适合的方法,它建立了一个新的型别,里面有特定值的定义。
enum TvState:
Off
On
Standby
state = TvState.Off
print "state was",state
输出结果
state was Off
列举值知道如何适当的表达自己,这也是你看到 "Off" 的原因。你也可以从字串转回列举值,方法是使用 Enum.Parse,如果字串并不是列举所定义的其中一个值,那么将会提出例外。
>>> import System >>> t = Enum.Parse(TvState,"Off") Off >>> t.GetType() TvState
虽然列举用来定义型别而且可以放在类别外面,但他们通常还是被放在类别里面,因为大多情况下这些特定的列举值由于用途的关系,只适用在类别里。
class TvController:
enum TvState:
Off
On
Standby
[property(State)]
_state as TvState
def ResetState(state as TvState):
...
除了上面所提到的好处之外,另外一个好处是列举本身就已经描述值的用途。举例来说,如果使用 def ResetState( state as int ),我们无法得知 state 的整数值应该是什么,我们必须依靠注解才有可能得知其正确值为何。