• Python中通过property设置类属性的访问


    Python类的所有属性都是公共的,无法将其设置为私有,即任何实例对象都可以通过该属性名对其进行访问。为了达到类似C++类的封装性能,可以使用property来设置Python类属性的访问权限。

    类的封装性能,指的是只能通过指定的方法对类的属性进行访问。因此,首先为类定义访问属性的方法。

    1 定义访问类属性的方法

    代码如下所示

    1. class A:
    2.     def __init__(self, name):
    3.         self.name = name
    4.     def get_name(self):
    5.         return self.name
    6.     def set_name(self, name):
    7.         self.name = name

    其中,类A有一个名为name的属性,通过get_name()方法获取该属性,通过set_name()方法设置该属性。

    2 使用property()设置访问类属性的方法

    在定义完获取和设置属性的方法之后,在类A的内部使用property()设置访问类属性的方法,代码如下所示。

    name = property(get_name, set_name)

    其中,property()的第一个参数表示获取指定属性时要调用的方法,第二个参数表示设置指定属性时要调用的方法。

    3 获取和设置指定属性

    通过如下代码获取和设置指定属性。

    1. a1 = A('yang')
    2. print(a1.my_name)
    3. a1.my_name = 'li'
    4. print(a1.my_name)

    第一个print()中打印的是a1.my_name,此时实际上调用的是property()的第一个参数,即get_name()获取类A的属性name;之后通过a1.my_name设置类A的属性name,此时调用的是类A的set_name()方法。

    4 property()扩展用法

    在“2 使用property()设置访问类属性的方法”中提到了property()前两个参数的含义。property()第三个参数表示在删除(del)实例对象时,自动调用的方法,而第四个参数的类型是字符串,表示对类的描述,在显示__doc__属性时显示。

    在类A的内部添加如下代码:

    1. def del_name(self):
    2.         print('del_name')
    3. my_name = property(get_name, set_name, del_name, '我是类A')

    之后,在主程序中使用如下代码

    1. print(A.my_name.__doc__)
    2. del a1.my_name

    此时,程序会打印“我是类A”和“del_name”信息。

  • 相关阅读:
    单调栈问题---(每日温度,下一个更大元素Ⅰ)
    身为网络工程师必考证书:华为HCIP认证!
    国科大体系结构习题 | 第二章 计算机系统结构基础
    深度学习之Python,OpenCV中的卷积
    【双链表增删查改接口的实现】
    MySQL重置root密码
    多账户管理最全面的解决方案
    嵌入式系统开发【深入浅出】 GPIO 类设备的驱动程序
    一款优秀持久层框架Mybatis详解!
    技术分享 | TiUP工具 - TiDB集群滚动升级核心流程解析
  • 原文地址:https://blog.csdn.net/hou09tian/article/details/132687597