文章內容:
1.列舉類與普通類的區別,普通類的缺陷
2.列舉型別,列舉類名稱,列舉值
3.列舉之間的比較
4.列舉轉換
5.enum和intenum的區別
6.如何避免列舉別名的出現
#列舉類
#列舉類不能夠例項化,例項化沒有意義
from enum import enum
class color(enum):
yellow=1
#yellow=2#typeerror: attempted to reuse key: 'yellow'
green=2
black=3
red=4
print(color.yellow)#color.yellow
print(type(color.yellow))#列舉型別
print(color.yellow.value)#1
print(type(color.yellow.value))#print(color.yellow.name)#yellow
print(type(color.yellow.name))#color.yellow=5#attributeerror: cannot reassign members.
#普通類
#缺陷:可變,沒有防止相同值得功能
#1yellwo=1
green=2
black=3
red=4
#2#可變
#3class color():#可變
yellwo=1
green=2
black=3
red=4
#列舉型別、列舉名稱與列舉值
from enum import enum
class color(enum):
yellow=1
green=2
black=3
red=4
print(color.yellow)#color.yellow
print(type(color.yellow))#列舉型別
print(color.yellow.value)#1
print(type(color.yellow.value))#列舉值
print(color.yellow.name)#yellow
print(type(color.yellow.name))#列舉名稱
print(color['green'])#color.green
for i in color:
print(i)
#color.yellow
#color.green
#color.black
#color.red
#列舉之間的比較
from enum import enum
class color(enum):
yellow=1
green=2
black=3
red=4
result1=color.green==color.black
print(result1)#false
result2=color.green==color.green
print(result2)#true
result3=color.green==2
print(result3)#false
result4=color.green)
#('green', )
#('black', )
#('red', )
for i in color.__members__:
print(i)
#yellow
#green
#black
#red
#列舉轉換
#最好在資料庫訪問使用列舉的數值而不是使用標籤名字字串
#在**裡面使用列舉類
a=1print(color(a))#color.yellow
#enum和intenum的區別
from enum import enum
class color1(enum):
yellow=1
green='str'
black=3
red=4
from enum import intenum
class color2(intenum):#valueerror: invalid literal for int() with base 10: 'str'
yellow=1
green='str'
black=3
red=4
#怎麼避免出現相同列舉值,避免別名的出現
from enum import intenum,unique
@unique
class color3(intenum):#valueerror: duplicate values found in : green -> yellow
yellow=1
green=1
black=3
red=4
#23中設計模式
#單利模式
#設計模式的優劣
通過普通類實現列舉
平時開發過程中,我們在接受某個引數的時候,該引數是乙個物件,並且只能是固定的某幾個物件,假如我們定義了乙個類color,我們程式中只有兩種color,white和black,這種情況下我們可能首先想到的是通過關鍵字enum定義乙個列舉類,今天我們不通過enum關鍵字來實現這種效果。首先,color這...
用普通類模擬列舉 列舉的原理
package com.yisces.y enum 用普通類模擬列舉 列舉的原理 author yisces public class enumprinciple private enumprinciple int num private number num 建立乙個靜態變數,型別為當前類,每乙個...
列舉類 強列舉
c 11增加了列舉類和列舉結構體。舊的c 列舉型別有乙個壞處是,他們將列舉成員引入周圍的命名空間,導致了名稱衝突 enum esecondcount int esecond 3 與列舉宣告在同乙個作用域 此外,舊的c enum會隱式轉換為int,當我們不預期或不需要這樣的轉換時會導致難以察覺的錯誤 ...