Python 物件導向高階程式設計 02 列舉類 元類

2021-08-21 20:35:48 字數 1475 閱讀 6781

from enum import enum

# month型別的列舉類

month = enum('month', ('jan', 'feb', 'mar', 'apr'))

for name, member in month._member_map_.items():

print(name, '=>', member, ',', member.value)

# for迴圈結果

jan => month.jan , 1

feb => month.feb , 2

mar => month.mar , 3

apr => month.apr , 4

# 更精確地控制列舉型別,從enum派生出自定義類

from enum import enum,unique

@unique # 幫助檢查保證沒有重複值

class

weekday

(enum):

sun=0

mon=1

tue=2

wed=3

thu=4

fri=5

sat=6

# 訪問列舉型別

day1=weekday.mon

print(day1) # weekday.mon

print(day1.value) # 1

print(weekday(1)) # weekday.mon

for name,member in weekday.__members__.items():

print(name,'=>',member)

# for迴圈結果

sun => weekday.sun

mon => weekday.mon

tue => weekday.tue

wed => weekday.wed

thu => weekday.thu

fri => weekday.fri

sat => weekday.sat

type() 函式既可以返回乙個物件的型別,又可以建立出新的型別。

示例:

# 先定義函式

deffn

(self,name='world'):

print('hello, %s' %name)

# 建立hello類

hello=type('hello',(object,),dict(hello=fn))

h=hello()

h.hello() # hello, world

建立乙個class物件,type() 函式要依次傳入3個引數:

class的名稱

繼承的父類集合,使用tuple寫法

class的方法名與函式繫結

注意:正常情況下,使用class … 來定義類,type()函式允許動態建立類。

2.1 metaclass

基本用不到,先省略不看

python 物件導向高階程式設計

python 裝飾器 property使用 classscreen property defwidth self returnself.width pass width.setter defwidth self,value self.width value property defheight se...

python物件導向高階程式設計

1.繫結方法 給所有例項都繫結方法,可以給class繫結方法 def set score self,score self.score score student.set score set score 給class繫結方法後,所有例項均可呼叫。但是,如果我們想要限制例項的屬性怎麼辦?比如,只允許對s...

物件導向高階程式設計

相同class的各物件互為友元 class complex int func const complex param private double re,im string inline string string const char cstr 0 else inline string strin...