Python property() 函數詳解 [OOP]

您的“關注”和“點贊”,是信任,是認可,是支持,是動力…

如意見相佐,可留言。
本人必將竭盡全力試圖做到準確和全面,終其一生進行修改補充更新。

1 property() 函數詳解

類對象.屬性 的方式訪問類中定義的屬性,這種做法是欠妥的,因爲它破壞了類的封裝原則(請參見博文《Python 封裝詳解》),類包含的屬性應該是隱藏的,只允許通過類提供的公有方法來間接實現對類屬性的訪問和操作。

重點來嘍!!!
在 Python 中提供了 property() 函數,可以不破壞類的封裝原則,還能讓開發者依舊使用 類對象.屬性 的方式操作類中的屬性。具體如何操作,請繼續往下瞅。

使用格式如下所示:

屬性名 = property(fget=None, fset=None, fdel=None, doc=None)

對以上格式說明,

  • 屬性名:指所操作的屬性。
  • fget參數:用於指定獲取該屬性值的方法。
  • fset參數:用於指定設置該屬性值的方法。
  • fdel參數:用於指定刪除該屬性值的方法。
  • doc參數:用於說明此函數(property() 函數)的作用,是一個文檔字符串。
  • 注意:以上四個參數,可以僅有第一個 fget參數,表示該屬性僅可讀;或者前兩個參數fgetfset,表示該屬性可讀、可寫;或前三個fgetfsetfdel,表示該屬性可讀、可寫和可刪除;或全部都寫,表示該屬性可讀、可寫和可刪除,還有說明文檔。

2 舉例說明

舉例如下所示:

class Staff:
    # 定義構造方法
    def __init__(self, name):
        self.__name = name

    # 定義設置 name 屬性值的方法
    def setName(self, name):
        self.__name = name

    # 定義獲取 name 屬性值的方法
    def getName(self):
        return self.__name

    # 定義刪除 name 屬性值的方法
    def delName(self):
        self.__name = 'null'

    # 爲 name 屬性配置 property() 函數
    name = property(getName, setName, delName, '指明出處。')


# ----查看說明文檔的兩種方式:-------
# help(Staff.name)  # 方式一
print(Staff.name.__doc__)  # 方式二
# ----------------------------------

# ----創建 Staff 類的對象,並初始化 name 屬性 ---
staff = Staff('碼農阿杰')
# ---------------------------------------------

# ----調用 getName() 方法的兩種方式:---------------------------------------------------------------
# print(staff.getName())  # 方式一:沒有爲 name 屬性配置 property() 函數時調用 getName() 方法的方式
print(staff.name)  # 方式二:爲 name 屬性配置 property() 函數後調用 getName() 方法的方式
# ------------------------------------------------------------------------------------------------

# ----調用 setName() 方法的兩種方式:---------------------------------------------------------------
# staff.setName('阿杰')  # 方式一:沒有爲 name 屬性配置 property() 函數時調用 setName() 方法的方式
# print(staff.getName())
staff.name = '阿杰'  # 方式二:爲 name 屬性配置 property() 函數後調用 getName() 方法的方式
print(staff.name)
# ------------------------------------------------------------------------------------------------

# ----調用 delName() 方法的兩種方式:-------------------------------------------------------
# staff.delName()  # 方式一:沒有爲 name 屬性配置 property() 函數時調用 delName() 方法的方式
# print(staff.getName())
del staff.name  # 方式二:爲 name 屬性配置 property() 函數後調用 delName() 方法的方式
print(staff.name)
# ----------------------------------------------------------------------------------------

運行結果:

指明出處。
碼農阿杰
阿杰
null

【友情鏈接】

微信公衆號:碼農阿杰

博客園

【參考資料】

Python 官網

Python 3.8.2 documentation

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