python 枚举类型
<p>在python中枚举是一种类(Enum,IntEnum),存放在enum模块中。枚举类型可以给一组标签赋予一组特定的值。</p><h4>枚举的特点:</h4>
<ol>
<li>枚举类中不能存在相同的标签名</li>
<li>枚举是可迭代的</li>
<li>不同的枚举标签可以对应相同的值,但它们都会被视为该值对应第一个标签的别名</li>
<li> 如果要限制定义枚举时,不能定义相同值的成员。可以使用装饰器@unique【要导入unique模块】</li>
<li>枚举成员之间不能进行大小比较,可进行等值和同一性比较</li>
<li>枚举成员为单例,不可实例化,不可更改</li>
</ol>
<p> </p>
<p>在开始前,我们先定义一个枚举类:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">from</span> enum <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> Enum
</span><span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> Vip(Enum):
MONDAY </span>=<span style="color: rgba(0, 0, 0, 1)"> 0
TUESDAY </span>= 1<span style="color: rgba(0, 0, 0, 1)">
WEDNESDAY </span>= 2<span style="color: rgba(0, 0, 0, 1)">
THURSDAY </span>= 3<span style="color: rgba(0, 0, 0, 1)">
FRIDAY </span>= 4<span style="color: rgba(0, 0, 0, 1)">
SATURDAY </span>= 5<span style="color: rgba(0, 0, 0, 1)">
SUNDAY </span>= 6</pre>
</div>
<p> </p>
<p>示例一:获取在枚举类中定义的枚举成员</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 方法一:</span>
<span style="color: rgba(0, 0, 255, 1)">print</span><span style="color: rgba(0, 0, 0, 1)">(Vip.MONDAY)
</span><span style="color: rgba(0, 0, 255, 1)">print</span><span style="color: rgba(0, 0, 0, 1)">(type(Vip.MONDAY))
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 方法二</span>
<span style="color: rgba(0, 0, 255, 1)">print</span>(Vip[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">TUESDAY</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">])
</span><span style="color: rgba(0, 0, 255, 1)">print</span><span style="color: rgba(0, 0, 0, 1)">(type(Vip.TUESDAY))
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 方法三</span>
<span style="color: rgba(0, 0, 255, 1)">print</span>(Vip(2<span style="color: rgba(0, 0, 0, 1)">))
</span><span style="color: rgba(0, 0, 255, 1)">print</span>(type(Vip(2<span style="color: rgba(0, 0, 0, 1)">)))
</span>-------------------<span style="color: rgba(0, 0, 0, 1)">
Vip.MONDAY
</span><enum <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Vip</span><span style="color: rgba(128, 0, 0, 1)">'</span>><span style="color: rgba(0, 0, 0, 1)">
Vip.TUESDAY
</span><enum <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Vip</span><span style="color: rgba(128, 0, 0, 1)">'</span>><span style="color: rgba(0, 0, 0, 1)">
Vip.WEDNESDAY
</span><enum <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Vip</span><span style="color: rgba(128, 0, 0, 1)">'</span>></pre>
</div>
<p> </p>
<p>示例二:枚举成员中包含标签名和该标签对应的值</p>
<div class="cnblogs_code">
<pre>today =<span style="color: rgba(0, 0, 0, 1)"> Vip.FRIDAY
</span><span style="color: rgba(0, 0, 255, 1)">print</span>(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Today is </span><span style="color: rgba(128, 0, 0, 1)">'</span> + today.name + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">. The number of today is </span><span style="color: rgba(128, 0, 0, 1)">'</span> +<span style="color: rgba(0, 0, 0, 1)"> str(today.value))
</span>----------------------------------------<span style="color: rgba(0, 0, 0, 1)">
Today </span><span style="color: rgba(0, 0, 255, 1)">is</span> FRIDAY. The number of today <span style="color: rgba(0, 0, 255, 1)">is</span> 4</pre>
</div>
<p> </p>
<p>示例三:包含相同值的枚举类的迭代,默认情况下不会输出别名,但可通过迭代__members__来显示所有成员标签</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">from</span> enum <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> Enum
</span><span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> Week(Enum):
MONDAY </span>=<span style="color: rgba(0, 0, 0, 1)"> 0
TUESDAY </span>= 1<span style="color: rgba(0, 0, 0, 1)">
FRIDAY </span>= 4<span style="color: rgba(0, 0, 0, 1)">
TODAY </span>= 4 <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 以FRIDAY别名的形式存在</span>
<span style="color: rgba(0, 0, 255, 1)">for</span> day <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> Week:
</span><span style="color: rgba(0, 0, 255, 1)">print</span><span style="color: rgba(0, 0, 0, 1)">(day)
</span><span style="color: rgba(0, 0, 255, 1)">print</span>(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">******************</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">for</span> day <span style="color: rgba(0, 0, 255, 1)">in</span> Week.<span style="color: rgba(128, 0, 128, 1)">__members__</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">print</span><span style="color: rgba(0, 0, 0, 1)">(day)
</span>----------------------<span style="color: rgba(0, 0, 0, 1)">
Week.MONDAY
Week.TUESDAY
Week.FRIDAY
</span>******************<span style="color: rgba(0, 0, 0, 1)">
MONDAY
TUESDAY
FRIDAY
TODAY</span></pre>
</div>
<p> </p>
<p>示例四:限定不含相同值的枚举类@unique</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">from</span> enum <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> Enum, unique
@unique
</span><span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> Week(Enum):
MONDAY </span>=<span style="color: rgba(0, 0, 0, 1)"> 0
TUESDAY </span>= 1<span style="color: rgba(0, 0, 0, 1)">
FRIDAY </span>= 4<span style="color: rgba(0, 0, 0, 1)">
TODAY </span>= 4
--------------------------------------<span style="color: rgba(0, 0, 0, 1)">
ValueError: duplicate values found </span><span style="color: rgba(0, 0, 255, 1)">in</span> <enum <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Week</span><span style="color: rgba(128, 0, 0, 1)">'</span>>: TODAY -> FRIDAY</pre>
</div>
<p> </p>
</div>
<div id="MySignature" role="contentinfo">
蒹葭苍苍,白露为霜;
所谓伊人,在水一方。<br><br>
来源:https://www.cnblogs.com/huwt/p/11183768.html
頁:
[1]