8. 使用@property

使用@property裝飾器可以讓呼叫取出屬性值的方法像是直接取用屬性,除了指令更簡潔外,也可以用來隱藏物件內的私用屬性,很適合用來裝飾getter方法。

(1) 用@property裝飾getter方法

以下是一個例子:

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

以上的程式用@peoperty裝飾了兩個方法,以後要取出no及name屬性(假設物件名稱是s)就可以直接寫成: 某個變數 = s.no 某個變數 = s.name

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

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

執行結果:

110001 王小明

說明:

問題:

撰寫一個「成績」(Score)的類別,每個實體有3個私用實體變數,包括國文、英文、數學。除了建構元外,請增加3個getter方法取出實體變數值,並且用@property裝飾它們。請生成以下實體,再印出其國文、英文、數學成測: 國文70,英文50,數學90 國文80,英文65,數學75 國文75,英文80,數學85