Python 列舉,列舉類與普通類的區別

2021-08-25 09:00:36 字數 2605 閱讀 7192

文章內容:

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,當我們不預期或不需要這樣的轉換時會導致難以察覺的錯誤 ...