您的“关注”和“点赞”,是信任,是认可,是支持,是动力…
如意见相佐,可留言。
本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新。
文章目录
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