Property 裝飾器

Property 裝飾器

Posted by 劉啟仲 on Monday, December 28, 2020

封裝 encapsulation

封裝 encapsulation:在物件導向中,封裝就是不讓外部使用者直接取用物件中的內容,只能用方法來修改。

class Car(object):
    def __init__(self, wheel):
        self._wheel = wheel
        
    def get_wheel(self):
      return self._wheel
    
    def set_wheel(self, wheel):
      self._wheel = wheel

Property

加上 property 裝飾器,就可以將私有屬性讓使用者用起來像公開屬性一樣。

使用property 裝飾器,方法名稱必須是同名。

class Car(object):
    def __init__(self, wheel):
        self.wheel = wheel # property
        
    @property
    def wheel(self):
      print('get wheel')
      return self._wheel
    
    @wheel.setter
    def wheel(self, wheel):
      print('set wheel')
      self._wheel = wheel

toyuta = Car(17)
print(toyuta.wheel) 
# get wheel
# 17
toyuta.wheel = 21 
# set wheel

設計流程:

  1. 直接設計屬性為public,除非真的只有class內部要用到,則可以寫為有底線的屬性(當作private)。
  2. 如需要getter, setter概念的method使用@property去達成。