@property和@setter和@getter

以下四種情況:

只讀不可寫

可寫可讀

不可寫不可讀(那你就沒必要自己把這個成員變量封裝到類裏面了吧)

可寫不可讀(不存在)

所以常見情況其實只有兩種.

 

 

@property @xxx.getter @xxx.setter 可寫 可讀 代碼 備註
O X O O O hello1.py  
O X X X O hello2.py  

@property具備@xxx.setter效果,產生可讀效果.

這三個裝飾器件的效果是:

可讀不一定可寫

可寫的一定可讀

#--------------------------------------附錄---------------------------------------------------------------

hello1.py

class Rectangle(object):

# 服務於返回數值
  @property
  def width(self):
    # 變量名不與方法名重複,改爲true_width,下同
    print("@property called")
    return self.true_width


# 服務於設數值
  @width.setter
  def width(self, input_width):
    print("setter method called")
    print("input_width=",input_width)
    self.true_width = input_width
#-----------------------------------------------------------------
  @property
  def height(self):
    return self.true_height
  @height.setter
  #與property定義的方法名要一致
  def height(self, input_height):
    self.true_height = input_height
#-----------------------------------------------------------------
s = Rectangle()
# 與方法名一致
s.width = 1024
s.height = 768

print("*********下面是輸出區域************")
print("s.width=",s.width)
print("s.true_width=",s.true_width)
print("--------------------")
print(s.height)

 

hello2.py

class Student(object):
#  服務於返回(可讀)
    @property
    def birth(self):
        return self._birth

# 服務於設數值(可寫)
    @birth.setter
    def birth(self, value):
        self._birth = value
#-----------------------------------------------------------------

#  服務於返回(可讀)
    @property
    def age(self):
        return 2015 - self._birth

#-----------------------------------------------------------------

s = Student()
# 與方法名一致
s.birth = 1024
# s.age = 768#如果執行此句會報錯

print("*********下面是輸出區域************")
print("s.birth=",s.birth)
print("s.age=",s.age)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章