Python学习笔记-@property装饰器

@property装饰器

类中的属性可以直接访问和赋值,这为类的使用者提供了方便,但
也带来了问题:类的使用者可能会给一个属性赋上超出有效范围的值。

为了解决这个问题,Python提供了@property装饰器,可以将类中属性的访问和赋值操作自动转为方法调用,这样可以在方法中对属性值的取值范围做一些条件限定。

getter和setter方法

直接使用@property就可以定义一个用于获取属性值的方法(即getter)。
如果要定义一个设置属性值的方法(setter),则需要使用名字“@属性名.setter”的装饰器。
见下方代码示例中:@score.setter

如果一个属性只有用于获取属性值的getter方法,而没有用于设置属性值的setter方法,则该属性是一个只读属性,只允许读取该属性的值,而不能设置改属性的值。

例:通过property装饰器使得学生成绩的取值范围必须在0~100之间。

import datetime
class Student:
    @property	# 直接使用@property表示定义一个用于获取属性值的方法(即getter)
    def score(self):    # 用@property装饰器定义一个用于获取score值的方法。
        return self._score
    '''
    在类的setter和getter方法中使用self访问属性时,需要在属性名前加上下划线_,
    否则系统会因不断递归调用而报错
    '''
    @score.setter
    def score(self, score):     # 用socre.setter定义一个用于设置score值的方法
        if score<0 or score>100:    # 不符合0~100的限定条件
            print('成绩必须在0~100之间!')
        else:
            self._score=score

    @property
    def age(self):  # 用@property装饰器定义一个用于获取age值的方法。
        return datetime.date.today().year - self.birthyear
		# datetime.date.today().year  输出结果为2024且类型为'int'
if __name__ == '__main__':
    stu=Student()   # 创建Student类对象stu
    stu.score=80    # 将stu对象的score属性赋值为80
    stu.birthyear=2000  # 将stu对象的birthyear属性赋值为2000
    print
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值