iT邦幫忙

2023 iThome 鐵人賽

DAY 20
0
Software Development

Python 微進階系列 第 20

Python 微進階 Day20 - class(類別) - 4 - @property

  • 分享至 

  • xImage
  •  

class(類別)

@property

  • 使用 @property 修飾器,可以讓原本的 method 變成變數(屬性)的形式
  • 使用在比較不適合直接存取物件變數時
    • 在讀取或修改變數時希望可以一起進行轉換
    • 限制範圍,在使用時先檢查格式
    • 只想讀取,但不想要被外部變更
  • 具有只能讀取的特性,不能被變更
  • 若要變更需要另外設定 setter
    • 除了 setter,還有 getter 和 deleter 方法
class M:
    def __init__(self):
        self.__val = 5

    @property
    def a(self):
        return (self.__val + 5)

c = M()

print(c.a)
# 10
# c.a = 20
# 跳錯,不可變更
# AttributeError: can't set attribute
class M:
    def __init__(self):
        self._val = 10

    @property
    def a(self):
        return (self._val + 5)
    
    @a.setter
    def a(self, n):
        if n < 0:
            self._val = 0
        else:
            self._val = n
    
    @a.deleter
    def a(self):
        del self._val
        print("del val")

c = M()

print(c._val)
# 10

# setter
c.a = -10
print(c._val)
# 0 因 < 0

# getter 直接使用
print(c.a)
# 5 因 0+5

# deleter
del c.a
# del val

print(c.a)
# self._val 已經被刪除
# AttributeError: 'M' object has no attribute '_val'

參考資料

次回

來看看繼承的部分


上一篇
Python 微進階 Day19 - class(類別) - 3 - @staticmethod、@classmethod
下一篇
Python 微進階 Day21 - class(類別) - 5 - inheritance
系列文
Python 微進階31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言