9. 使用@<屬性名稱>.setter

使用@<屬性名稱>.setter裝飾器可以讓一個設定值方法的使用方式寫成: 實體名稱.方法名稱 = 設定值 這個裝飾器使用之前,應該已經用@property修飾另一個有相同方法名稱的getter。

(1) 用@<屬性名稱>.setter裝飾setter方法

以下是一個例子:

class Student():
    def __init__(self, no, name):
        self.__no = no
        self.__name = name
        
    @property
    def no(self):
        return self.__no
    
    @property
    def name(self):
        return self.__name 
    
    @no.setter
    def no(self, no):
        self.__no = no
        
    @name.setter
    def name(self, name):
        self.__name = name

這個程式用@no.setter及@name.setter修飾兩個屬性的setter方法,使用此類別的實體(假設是s)可用: s.no = '123' s.name = 'tomlin' 設定物件的屬性值。

以下是一個使用它們的例子:

s = Student('110001', '王小明')
print(s.no)
print(s.name)

s.name = '王大明'
print(s.name)

執行結果:

110001 王小明 王大明

說明:

問題:

撰寫一個「成績」(Score)的類別,每個實體有3個私用實體變數,包括國文、英文、數學。除了建構元外,請增加3個getter及setter方法取出及設定實體變數值,並且用@property及@<屬性>.setter裝飾它們。請生成以下實體,再印出其國文、英文、數學成測。完成後,假設現在每個人的數學可加5分,請修改其值並顯示新的分數: 國文70,英文50,數學90 國文80,英文65,數學75 國文75,英文80,數學85