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

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