千家信息网

Python中property属性的作用是什么

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇内容主要讲解"Python中property属性的作用是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Python中property属性的作用是什
千家信息网最后更新 2026年11月01日Python中property属性的作用是什么

本篇内容主要讲解"Python中property属性的作用是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Python中property属性的作用是什么"吧!

前言

Python 动态属性的概念可能会被面试问到,在项目当中也非常实用,但是在一般的编程教程中不会提到,可以进修一下。

先看一个简单的例子。创建一个 Student 类,我希望通过实例来获取每个学生的一些情况,包括名字,成绩等。成绩只有等到考试结束以后才会有,所以实例化的时候不会给它赋值。

class Student:    def __init__(self, name):        self.name = name        self.score = Nonemike = Student('mike')

考试完以后,准备给 mike 打分:

mike.score = 999

在这里,老师一不小心多打了个 9 ,通常来说打分都是 100 分值,999 是一个非法数据,不应该赋值成功。学生一多,老师打分出现手误的情况肯定会越来越多,所以我们必须想办法修改程序,限制 score 的值必须在 0-100 分。

限制值

我们定义一个方法,如果输入的不是 0-100 的整数,就让程序报错,数据合法,我们就把 score 属性修改成功。

def set_score(self, new_score):    if not isinstance(new_score, int):        raise ValueError('score must be int')    if 0 <= new_score <= 100:        self.score = new_score        return self.score    else:        raise ValueError('score invalid')

这样我们每次需要获取成绩的时候使用 self.score 获取,修改成绩的时候调用函数来修改:

mike.set_score(999)

调用以后会报错,因为 999 是非法数据。注意,这个时候我使用 self.score 还是可以进行设置,而且不报错:

self.score = 999

这显然是不行的。所以我们要提供一种机制,把 score 变成私有属性,不能让外部访问。很遗憾,python 的私有属性是伪私有。通常我们把 _ 开头的属性叫私有属性,但是这只是一种协议和规定,你看到下划线开头的属性,不要去访问了。你硬要访问,是可以的,python 并不会禁止。

使用 @property 的方式代替。

上面的方法虽然实现了功能,但是改变了属性的使用方式。平常是这样使用的:

# 获取属性a = mike.score# 设置属性mike.score = 99@propertydef score(self):    return self._score@score.setterdef score(self, new_score):    if not isinstance(new_score, int):        raise ValueError('score must be int')        if 0 <= new_score <= 100:            self._score = new_score            return self._score        else:            raise ValueError('score invalid')

动态属性的好处

  • 统一了调用方式。self.score = 99 的方式,而不是函数调用的方式。

  • _score 我们就不直接去使用了。你要用也可以,不建议。

  • 如果我们一个属性只可以读,把 setter 部分注释掉就可以了。

现在我们来完善这个类,添加 birth 属性和年龄属性:

from datetime import datetimeclass Student:    def __init__(self, name, birth=1920):        self.name = name        self._score = None        self.birth = birth        self.age = datetime.now().year - self.birthmike = Student('mike')print(mike.birth)print(mike.age)
  • birth 和 age 这两个是可以根据一个求出另外一个的。存在数据冗余问题。

  • age 属性这样是有问题的。mike 初始化的时候,age 已经被求出来了,如果我在下一年再去访问 age 属性,那他就是个错误的值。可以通过把 age 设成现在的秒数来验证:

    self.age = datetime.now().secondmike = Student('mike')time.sleep(5)print(mike.age)print(datetime.now().second)

动态显示

@propertydef age(self):    return datetime.now().year - self.birth

注意,这里不要去设置 @age.setter ,因为他是动态变化的,你修改了会造成数据不一致,它只能作为一个只读属性。

@property 作用和应用场景:

  • @property 优化了属性读取和设置的可读性

  • 需要限制属性的特征;

  • 只读属性。如果属性只可以读,不可以写,用起来很方便。

  • 这个属性根据一个变化的环境动态改变。

附:用property代替getter和setter方法

>>>class Watermelon():       def __init__(self,price):           self._price = price                  #私有属性,外部无法修改和访问       def get_price(self):           return self._price       def set_price(self,new_price):           if new_price > 0:               self._price = new_price           else:               raise 'error:价格必须大于零'

用property代替getter和setter

>>>class Watermelon():       def __init__(self,price):           self._price = price       @property                          #使用@property装饰price方法       def price(self):           return self._price       @price.setter                      #使用@property装饰方法,当对price赋值时,调用装饰方法       def price(self,new_price):           if new_price > 0:               self._price = new_price           else:               raise 'error:价格必须大于零' >>> watermelon = Watermelon(4)>>> >>> watermelon.price4>>> >>> watermelon.price = 7>>> >>> watermelon.price7

到此,相信大家对"Python中property属性的作用是什么"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

属性 方法 动态 数据 方式 时候 私有 作用 成绩 限制 实用 成功 价格 内容 函数 学生 实例 开头 情况 程序 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网新科技 互联网电商科技 互联网品科技 互联网巨头科技公司 深圳科技互联网 北京互联网科技有限公司 互联网金融 金融科技 互联网科技英文 碳银互联网科技有限公司 佰商互联网科技有限公司 互联网科技创新企业排名 互联网科技博主是什么意思 承德科技产业互联网发展 宁夏众和广鑫互联网科技有限公司 未来五年的互联网科技 科技类公司包括互联网吗 上海互联网科技公司ppt 抖集互联网科技技术咨询 亚光科技低轨卫星互联网 六子台科技互联网展会 喔噻互联网科技有限公司 深圳市人人互联网科技有限公司 玖二柒互联网科技公司待遇 西藏七维空间互联网科技有限公司 元气玛特互联网科技公司是外包吗 银行科技岗属于互联网吗 陕西云淼互联网科技公司 美国五大互联网科技公司市值多少 北京瑞云互联网科技有限公司 颐高云石互联网科技
0