python(@property用法详解)

class People(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age
        # 私有属性
        self.__number = 0
    # 获取私有属性值  number = p1.number 会执行这个函数
    @property
    def number(self):
        # 返回私有属性值
        return self.__number
    # 设置私有属性值  p1.number = 666
    @number.setter
    def number(self, value):
        # 设置__number的值
        self.__number = value

    # 删除私有属性  del p1.number 会执行这个函数
    @number.deleter
    def number(self):
        # 删除属性
        del self.__number
p1 = People('张三', 22)
# 正常的对象属性赋值
# 对象.属性名 = 属性值
p1.name = '李四'
# 获取对象的属性值
name = p1.name
# 删除对象的属性
del p1.name
# 私有属性升级版
# 会去执行@property装饰number函数,函数执行完成后返回一个结果
num = p1.number
print(num)
# 会去执行@number.setter装饰的number函数,在函数中设置__number属性的值
p1.number = 666
# 会去执行@property装饰number函数,函数执行完成后返回一个结果
print(p1.number)
# 会去执行@number.deleter装饰的number函数,在函数中会将__number属性删除
del p1.number
# 会去执行@property装饰number函数,函数执行完成后返回一个结果
print(p1.number)

小例子:

class People(object):
    '''
        给name属性赋值,值必须是字符串,否则抛出异常
        给age属性赋值,值必须是整数,否则抛出异常

    '''
    def __init__(self,name,age):
        #执行@name.setter装饰的name函数,在函数中给_name属性赋值
        self.name = name
        self.age = age
    #获取name的属性值
    @property
    def name(self):
        #返回属性值时,也可以添加一些额外的功能
        a = self._name
        #把姓氏换成*
        a = a.replace(a[0],'*')
        #返回name属性值
        return a
    #设置name属性的值
    @name.setter
    def name(self,value):
        #在赋值之前添加判断
        if not isinstance(value,str):
            # 抛出异常
            raise TypeError('People object.name,name must be a str!')
        #设置name的属性值
        self._name = value
        #还可以继续添加其他功能

    # 删除name属性
    @name.deleter
    def name(self):
        #添加一些额外的功能
        if not hasattr(self,'_name'):
            raise AttributeError('People object has no attribute "_name"')
        #删除_name属性
        del self._name
     #获取age属性的值
    @property
    def age(self):
        if self._age >=100:
            print('老妖精')
        elif 50<self._age<100:
            print('老年人')
        elif 18<self._age<=50:
            print('成年人')
        else:
            print('小屁孩')
        return self._age
    @age.setter
    def age(self,value):
        if not isinstance(value,int):
            # 抛出异常
            raise TypeError('People object.age,age must be a int value!!!!')
        self._age = value
    @age.deleter
    def age(self):
        if not hasattr(self,'_age'):
            raise AttributeError('People object has no attribute "_age"!!!')
        del self._age
p1 = People('张三',23)
# name的属性值 必须是一个字符串。否则抛出异常
p1.name = '小星星'
print(type(p1.name))
print(p1.name)
# 删除对象的属性
del p1.name

p1.age = 18
print(p1.age)
del p1.age


  • 14
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值