在類別中宣告的變數是類別變數(並非宣告在方法的區域變數). 類別變數是類別的屬性, 如果用[類別名稱.變數名稱]取存, 會生成一個靜態變數(記憶體中只有一份); 如果用[self.變數名稱]取存, 則會生成self所指那個實例的變數(每個實例各自有一份).
#------------------------------------------------
# 定義學生類別
#------------------------------------------------
class Student():
#============================================
# 類別變數, 以Student.depts取存=>產生靜態變數
# 以self.depts取存. =>產生實體變數
#============================================
depts=['會資系', '財金系', '財稅系', '企管系', '商務系', '資管系', '應外系', '商設系', '商創系', '數媒系']
#------------------------------
# 建構元
#------------------------------
def __init__(self, stuNo, stuName, deptNo=None):
self.stuNo=stuNo
self.stuName=stuName
self.deptNo=deptNo
#----------------------------------
# 取用deptNo屬性的方法
#----------------------------------
@property
def deptNo(self):
return self._deptNo
#----------------------------------
# 寫入deptNo屬性的方法
#----------------------------------
@deptNo.setter
def deptNo(self, deptNo):
if deptNo in ['1', '2', '3', '4', '5', '6', '7', 'A', 'B', 'C']:
self._deptNo=deptNo
else:
self._deptNo=None
#==================================
# 取出系名的方法
# (取用類別變數)
#==================================
def department(self):
if self._deptNo != None:
if self._deptNo >= 'A':
return Student.depts[ord(self._deptNo)-ord('A')+7]
else:
return Student.depts[ord(self._deptNo)-ord('1')]
else:
return None
#---------------------------
# 匯入ntub模組
#---------------------------
import ntub
#---------------------------
# 將建成物件的原始資料
#---------------------------
data=[('10556001', '王小明', '6'), ('10552002', '陳小華', '2'), ('1055A003', '李小強', 'A'), ('10557004', '張小文', 'C'), ('10551005', '周小芳', '8')]
#---------------------------
# 將放置多個物件的list
#---------------------------
students=[]
#-----------------------------------------
# 生成Student類別的實例, 將它加入list中
#-----------------------------------------
for d in data:
students.append(ntub.Student(d[0], d[1], d[2]))
#---------------------------
# 逐一呼叫各個物件的方法
#---------------------------
for s in students:
print('學號:{} 姓名:{} 系別:{} 系名:{}'.format(s.stuNo, s.stuName, s.deptNo, s.department()))
執行結果:
學號:10556001 姓名:王小明 系別:6 系名:資管系
學號:10552002 姓名:陳小華 系別:2 系名:財金系
學號:1055A003 姓名:李小強 系別:A 系名:商設系
學號:10557004 姓名:張小文 系別:C 系名:數媒系
學號:10551005 姓名:周小芳 系別:None 系名:None
#---------------------------
# 匯入ntub模組
#---------------------------
import ntub
#---------------------------
# 將建成物件的原始資料
#---------------------------
data=[('10556001', '王小明', '6'), ('10552002', '陳小華', '2'), ('1055A003', '李小強', 'A'), ('10557004', '張小文', 'C'), ('10551005', '周小芳', '8')]
#---------------------------
# 將放置多個物件的list
#---------------------------
students=[]
#-----------------------------------------
# 生成Student類別的實例, 將它加入list中
#-----------------------------------------
for d in data:
students.append(ntub.Student(d[0], d[1], d[2]))
#-----------------------------------------
# 印出每個實例的實體變數
#-----------------------------------------
for d in students:
print(d.depts)
print('-'*40)
#-----------------------------------------
# 改變第1個實例的實體變數
#-----------------------------------------
students[0].depts=[1,2,3]
#-----------------------------------------
# 印出每個實例的實體變數
#-----------------------------------------
for d in students:
print(d.depts)
print('-'*40)
執行結果:
['會資系', '財金系', '財稅系', '企管系', '商務系', '資管系', '應外系', '商設系', '商創系', '數媒系']
['會資系', '財金系', '財稅系', '企管系', '商務系', '資管系', '應外系', '商設系', '商創系', '數媒系']
['會資系', '財金系', '財稅系', '企管系', '商務系', '資管系', '應外系', '商設系', '商創系', '數媒系']
['會資系', '財金系', '財稅系', '企管系', '商務系', '資管系', '應外系', '商設系', '商創系', '數媒系']
['會資系', '財金系', '財稅系', '企管系', '商務系', '資管系', '應外系', '商設系', '商創系', '數媒系']
----------------------------------------
[1, 2, 3]
['會資系', '財金系', '財稅系', '企管系', '商務系', '資管系', '應外系', '商設系', '商創系', '數媒系']
['會資系', '財金系', '財稅系', '企管系', '商務系', '資管系', '應外系', '商設系', '商創系', '數媒系']
['會資系', '財金系', '財稅系', '企管系', '商務系', '資管系', '應外系', '商設系', '商創系', '數媒系']
['會資系', '財金系', '財稅系', '企管系', '商務系', '資管系', '應外系', '商設系', '商創系', '數媒系']
----------------------------------------