1. 程式人生 > >Python3之裝飾器---特殊屬性@property

Python3之裝飾器---特殊屬性@property

特殊屬性 @property

主要是實現其他語言所擁有的getter和setter功能

作用: 用來模擬一個屬性 通過@property裝飾器,可以對模擬屬性的賦值和取值加以控制

舉個簡單的栗子:

class Student:
    def __init__(self, s):
        self.__score = s

    # 設定__score的值
    def setScore(self, s):
        if 0 <= s <= 100:
            self.__score = s

    # 得到__score的值
    def
getScore(self):
return self.__score s = Student(50) # 建立一個例項物件 s.setScore(100) # 修改成績 print(s.getScore()) # 得到成績 100

以上是一個正常的寫法,經過加工後:

class Student:
    def __init__(self, s):
        self.__score = s

    @property
    def score(self):
        print('getter被呼叫')
        return self.__score

    @score.setter
def score(self, s): print('setter被呼叫') if 0 <= s <= 100: self.__score = s s = Student(50) # s.setScore(100) s.score = 100 score = s.score print('成績是{}'.format(score))
  • 這兩個函式必須要同名 執行過程: 這裡寫圖片描述

s.score = 100是設定,會呼叫@score.setter裝飾器的score函式 此時列印:setter被呼叫 score = s.score其中的s.score是呼叫,會呼叫@property裝飾的score函式, 列印:getter被呼叫,並將__score值返回,用score繫結 print(‘成績是{}’.format(score)) 列印的就是返回的score的值 100

本節完