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

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

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

1 定义访问类属性的方法

代码如下所示

class A:
    def __init__(self, name):
        self.name = name
    def get_name(self):
        return self.name
    def set_name(self, name):
        self.name = name

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

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

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

name = property(get_name, set_name)

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

3 获取和设置指定属性

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

a1 = A('yang')
print(a1.my_name)
a1.my_name = 'li'
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的内部添加如下代码:

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值