您的“關注”和“點贊”,是信任,是認可,是支持,是動力…
如意見相佐,可留言。
本人必將竭盡全力試圖做到準確和全面,終其一生進行修改補充更新。
文章目錄
1 property() 函數詳解
用 類對象.屬性
的方式訪問類中定義的屬性,這種做法是欠妥的,因爲它破壞了類的封裝原則(請參見博文《Python 封裝詳解》),類包含的屬性應該是隱藏的,只允許通過類提供的公有方法來間接實現對類屬性的訪問和操作。
重點來嘍!!!
在 Python 中提供了 property()
函數,可以不破壞類的封裝原則,還能讓開發者依舊使用 類對象.屬性
的方式操作類中的屬性。具體如何操作,請繼續往下瞅。
使用格式如下所示:
屬性名 = property(fget=None, fset=None, fdel=None, doc=None)
對以上格式說明,
- 屬性名:指所操作的屬性。
fget
參數:用於指定獲取該屬性值的方法。fset
參數:用於指定設置該屬性值的方法。fdel
參數:用於指定刪除該屬性值的方法。doc
參數:用於說明此函數(property() 函數)的作用,是一個文檔字符串。- 注意:以上四個參數,可以僅有第一個
fget
參數,表示該屬性僅可讀;或者前兩個參數fget
和fset
,表示該屬性可讀、可寫;或前三個fget
、fset
和fdel
,表示該屬性可讀、可寫和可刪除;或全部都寫,表示該屬性可讀、可寫和可刪除,還有說明文檔。
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