4. 增加類別變數

類別變數(class variable)寫在類別中,而且不是寫方法之內(否則會變成方法內的區域變數)。類別變數可由「類別名稱.類別變數」的寫法取存它。

(1) Student的類別變數

以下是一個例子:

#廣域變數
school = 'NTUB'

class Student():
    #類別變數
    schoolName = '國立臺北商業大學'
    
    def __init__(self, no, name):
        self.no = no
        self.name = name
        
    def data(self):
        return f'{Student.schoolName}, {self.no}, {self.name}'

第6行分別宣告一個類別變數,名稱是schoolName。 第13行使用了該類別變數,以「Student.schoolName」使用它。

產生實體:

s1 = Student('11056001', '王小明')
s2 = Student('11056002', '陳小華')

print(Student.schoolName)  #取用類別變數
print(s1.data())
print(s2.data())

執行結果:

國立臺北商業大學 國立臺北商業大學, 11056001, 王小明 國立臺北商業大學, 11056002, 陳小華

說明:

(2) 「廣域變數」與「類別變數」同名

當「廣域變數」與「類別變數」同名時,取用類別變數時用「類別名稱.類別變數」的寫法;若使用變數時不加類別名稱,而且該名稱不存在區域變數中,則是指廣域變數。

#廣域變數
schoolName = 'NTUB'

class Student():
    #類別變數
    schoolName = '國立臺北商業大學'
    
    def __init__(self, no, name):
        self.no = no
        self.name = name
        
    def data(self):
        return f'{schoolName}, {self.no}, {self.name}'
        
#-------------------------
s1 = Student('11056001', '王小明')
s2 = Student('11056002', '陳小華')

print(Student.schoolName)  #取用類別變數
print(s1.data())
print(s2.data())

執行結果:

國立臺北商業大學 NTUB, 11056001, 王小明 NTUB, 11056002, 陳小華

說明:

問題:

撰寫一個「員工」(Employee)的類別,其中有一個類別變數,wage=250,代表員工每小時的加班薪水為250元。另外有一個建構元,分別設定員工編號、姓名、加班時數。另外也有4個實體方法,分別可以回傳員工編號、姓名、加班時數、加班費(每小時加班薪水*加班時數)。請建立以下2個實體,顯示他們的編號、姓名、加班時數、加班費: 編號:A001,姓名:王小明,加班時數:10 編號:A002,姓名:陳小華,加班時數:6