【Python】@property私有属性的控制和保护

@property的使用:对属性的控制和保护

一、保护变量,防止被修改

@property的首要目的是在访问私有变量时,保护变量不被随意修改

class People(object):
    def __init__(self, name, age):
        self.name = name
        self._age = age

    @property
    def people_age(self):
        return self._age  # 返回私有属性值

客户端在不清楚age属性变量名的前提下,只能通过People.people_age获取age属性值,同时无法修改该属性。

people = People(name='Tom', age=13)
print(people.name)  # 一般属性直接访问
print(people._age)  # 私有属性不恰当访问,客户端是不知道_age这个变量名的
print(people.people_age)  # 私有属性正确访问,客户端只知道通过,people_age这个变量名获取_age这个属性
# people.people_age = 1  # 同时,该属性无法被修改,执行该语句会报错

但客户端如果知道age属性的变量名是_age,则可以直接修改属性值。

people._age = 2
print(people.people_age)  # 2

二、控制变量属性值的改变

为了能够让客户端正确改变属性值,提供了setter和deleter两个方法,对私有属性的赋值和删除进行了限制。

class People(object):
    def __init__(self, name, age):
        self.name = name
        self._age = age

    @property
    def people_age(self):
        return self._age  # 返回私有属性值

    @people_age.setter
    def people_age(self, value):
        if 0 < value < 99:
            self._age = value

    @people_age.deleter
    def people_age(self):
        if self._age < 10:
            del self._age

初始化

people = People(name='Tom', age=13)

(1)限制赋值

# 赋值
people.people_age = 13  # 修改数值在0到99之间,客户端可以成功修改这个属性
print(people.people_age)
people.people_age = 101  # 修改数值超过99,客户端修改失败,防止客户端随意更改
print(people.people_age)
13
101 must be between 0 and 99
13

(2)限制删除

# 删除
del people.people_age  # 删除属性失败,因为年龄大于10岁
print(people.people_age)
people.people_age = 3
del people.people_age  # 删除属性成功,因为年龄小于10岁
# print(people.people_age)  # 报错,属性已经消失
13


欢迎关注~ SandQuant 专注于全球金融数据和量化投资策略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值